由软件包生成的类使用的类使用的类来简化肥皂量UX。
目的是提供包装生机项目生成的类之上的一类通用类。
例如,它允许轻松地循环遍历SOAP Rustem对象属性的数组元素,它允许轻松为SOAP请求设置HTTP和SOAP标头,并允许从其数组状态表示的对象轻松填充对象。
必须使用定义的接口,以便能够匹配包装生成器生成类的要求。
该接口必须用于定义新的EnumType类。
至少有/大多数必须实现的方法,因此即使您看不到目标的目标也很快实现:
$value有效。可以使用getValidValues方法返回的字符串数组来完成,从而在生成的枚举类中始终存在。如果您不想实现此方法,也可以创建自己的类从我们的AbstractStructenumbase类中继承的类。
该接口必须用于定义新的结构类型类。
至少有/大多数必须实现的方法,因此即使您看不到目标的目标也很快实现:
如果您不想实现此方法,也可以创建自己的类从我们的AbstractStructBase类继承的类。
该接口必须用于定义新的ArrayType类。目的是提供围绕WSDL定义的数组结构的实用方法,以简化其内容的处理。因此,此接口从我们的结构接口接口加上本机阵列,迭代器和可数的PHP接口
唯一必须实现的方法是getAttributeName ,但要注意它是在每个生成的arrayType类中实现的,因此无需定义它。这只是提醒您ArrayType类中的可用内容。
因此,基本上,您至少必须覆盖该接口继承的PHP接口声明的方法
如果您不想实现所有方法,也可以创建自己的类,该类从我们的AbstractStructarrayBase类继承。
必须使用此接口来定义软件包生成的任何ServiceType类的新肥皂基类。
这是该接口及其实用程序定义的常数/选项:
location一起使用非WSDL模式所必需的)trueWSDL_CACHE_NONE之一, WSDL_CACHE_DISK , WSDL_CACHE_MEMORY或WSDL_CACHE_BOTHSOAP_1_1或SOAP_1_2分别选择SOAP 1.1或1.2。如果省略,使用肥皂1.1SOAP_SINGLE_ELEMENT_ARRAYS的bitmask, SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (默认)或SOAP_AUTHENTICATION_DIGESTSOAP_SSL_METHOD_TLS之一, SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3或SOAP_SSL_METHOD_SSLv23 这是必须实施的方法,以及为什么:
如果您不想实现所有这些方法,也可以创建自己的类别从我们的Abstract SoapClientBase类中继承的类。
此类是软件包Genererator生成的任何EnumType类的基类。它实现了我们的structenuminterface接口。它定义了两种方法:
getValidValues方法返回的当前Enumtype类常数的值。该类是软件包生成器生成的任何StructType类型类的基类。它实现了我们的结构接口。它定义了五种方法:
var_export存储的对象的字符串表示时,有用。它还使您可以简化包含许多属性的对象的实例,这些属性很难使用__construct方法进行实例化。您可以将__set_state视为一种保湿方法。__set但由__set_state方法使用。另外,通过ClassMap选项定义__set方法,用于肥皂的使用,可以打破您收到的对象的正确保湿。__get 。由我们的AbstractStructarrayBase类使用。 $ item = Api StructType Item:: __set_state ([
' id ' => 1 ,
' name ' => ' Entity #1 ' ,
' label ' => ' Entity #1 ' ,
' _href ' => ' http://www.entity.com ' ,
]);
// $item is now an ApiStructTypeItem object此类是软件包生成器生成的任何ArrayType类的基类。它实现了我们的structarrayinterface接口。
一旦您有一个元素,即一系列项目,例如:
$ items = Api ArrayType Items:: __set_state ([
' items ' => [
Api StructType Item:: __set_state ([
' id ' => 1 ,
' name ' => ' Entity #1 ' ,
' label ' => ' Entity #1 ' ,
' _href ' => ' http://www.entity-1.com ' ,
]),
Api StructType Item:: __set_state ([
' id ' => 2 ,
' name ' => ' Entity #2 ' ,
' label ' => ' Entity #2 ' ,
' _href ' => ' http://www.entity-2.com ' ,
]),
Api StructType Item:: __set_state ([
' id ' => 3 ,
' name ' => ' Entity #3 ' ,
' label ' => ' Entity #3 ' ,
' _href ' => ' http://www.entity-3.com ' ,
]),
],
]);
// 'items' is the unique property of the object
// Its name is returned by the getAttributeName method
// defined in the generated ApiArrayTypeItems classcount , length方法:给您对象包含的项目数 foreach ( $ items as $ item ) {
// $items->current() and $item is an ApiStructTypeItem object
// $items->key() is the current index
} $ items -> first (); $ items -> last (); $ items -> item ( $ index ); $ items -> add ( Api StructType Item:: __set_state ([
' id ' => 4 ,
' name ' => ' Entity #4 ' ,
' label ' => ' Entity #4 ' ,
' _href ' => ' http://www.entity-4.com ' ,
]));此类是软件包生成器生成的任何ServiceType类的基类。它的目标是通过实现我们的SoapClient Interface接口来提供实用程序/少数方法。基本上,它是一种装饰器的设计模式,因为该类将肥皂对象作为静态属性,以便能够在其上应用方法。它是一个静态属性,以便在多个调用之间有一个单例(允许在调用之间自动发送cookie)。它可以通过将真实作为第二个参数来重置。
假设您有这种类型的生成ServiceType类别:
namespace Api ServiceType ;
use WsdlToPhp PackageBase AbstractSoapClientBase ;
class ApiUpdate extends AbstractSoapClientBase
{
public function UpdateBulkOrder ( Api StructType ApiUpdateBulkOrder $ parameters )
{
try {
$ this -> setResult ( $ this -> getSoapClient ()-> UpdateBulkOrder ( $ parameters ));
return $ this -> getResult ();
} catch ( SoapFault $ soapFault ) {
$ this -> saveLastError ( __METHOD__ , $ soapFault );
return false ;
}
}
}您可以做:
use WsdlToPhp PackageBase AbstractSoapClientBase ;
$ options = [
AbstractSoapClientBase:: WSDL_URL => ' __WSDL_URL__ ' ,
AbstractSoapClientBase:: WSDL_CLASSMAP => Api ApiClassMap:: classMap (),
];
// sets the first instance of SoapClient within AbstractSoapClientBase
$ update = new Api ServiceType ApiUpdate ( $ options );
// resets the SoapClient instance
$ update = new Api ServiceType ApiUpdate ( $ options , true );然后调用这些基本方法中的任何一个:
DOMDocument版本DOMDocument版本$this->saveLastError(__METHOD__, $soapFault)被称为自动填充的错误SoapFault对象 $ result = $ update -> UpdateBulkOrder ( new Api StructType ApiUpdateBulkOrder ())
if ( $ result !== false ) {
echo "n This is the result as an object: " . print_r ( $ update -> getResult (), true );
// Actually $result is the same data than $update->getResult()
} else {
echo "n This is the XML request: " . $ update -> getLastRequest ( false );
echo "n These are the request's headers: " . $ update -> getLastRequestHeaders ( false );
echo "n This is the XML response: " . $ update -> getLastResponse ( false );
echo "n These are the response's headers: " . $ update -> getLastResponseHeaders ( false );
echo "n These are the last errors: " . print_r ( $ update -> getLastError (), true );
echo "n This is the current error: " . print_r ( $ update -> getLastErrorForMethod ( ' ApiServiceTypeApiUpdate::UpdateBulkOrder ' ), true );
}您还有其他方法,例如:
// A sample of its usage in the generated ServiceType class
public function setSoapHeaderCSPCHD ( Api StructType ApiCSPCHD $ cSPCHD , $ nameSpace = ' http://tempuri.org ' , $ mustUnderstand = false , $ actor = null )
{
return $ this -> setSoapHeader ( $ nameSpace , ' CSPCHD ' , $ cSPCHD , $ mustUnderstand , $ actor );
}随时提出一些拉动请求。我们将研究它们,并让您知道何时可以集成。
您可以使用以下命令运行单元测试:
$ cd /path/to/src/WsdlToPhp/PackageBase/
$ composer install
$ composer test
多亏了PHPFARM的Docker图像,可以使用CLI在任何PHP版本下在本地运行测试:
首先,您需要创建可以使用docker-compose进行的容器,通过从项目的根目录中运行以下命令行:
$ docker-compose up -d --build然后,您拥有一个名为package_base的容器,您可以在其中运行composer命令和php cli命令,例如:
# install deps in container (using update ensure it does use the composer.lock file if there is any)
$ docker exec -it package_base php-7.4 /usr/bin/composer update
# run tests in container
$ docker exec -it package_base php-7.4 -dmemory_limit=-1 vendor/bin/phpunit如果您有问题,请随时创建问题。
麻省理工学院许可证(麻省理工学院)。请参阅许可证文件以获取更多信息。