由軟件包生成的類使用的類使用的類來簡化肥皂量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如果您有問題,請隨時創建問題。
麻省理工學院許可證(麻省理工學院)。請參閱許可證文件以獲取更多信息。