SoapClient UXを容易にするために、PackageGeneratorプロジェクトによって生成されたクラスで使用されるクラス。
目標は、PackageGenerator Projectによって生成されたクラスの上にある一般的で有用なクラスを提供することです。
たとえば、SOAP Resultオブジェクトプロパティの配列要素を簡単にループできるようになり、SOAPリクエストのHTTPとSOAPヘッダーを簡単に設定でき、配列状態表現からオブジェクトを簡単に入力できます。
PackageGenerator生成クラスの要件を一致させるには、定義されたインターフェイスを使用する必要があります。
このインターフェイスを使用して、新しいEnumtypeクラスを定義する必要があります。
少なくとも/ほとんどの方法を実装する必要があるため、目標がわからなくても実装するのは非常に速いです。
$valueが有効であることを確認する必要があります。これは、生成された列挙クラスに常に存在するgetValidValuesメソッドによって返される文字列の配列を使用して実行できます。この方法を実装したくない場合は、抽象的なストラクチャンバゼクラスから継承する独自のクラスを作成することもできます。
このインターフェイスを使用して、新しいstructTypeクラスを定義する必要があります。
少なくとも/ほとんどの方法を実装する必要があるため、目標がわからなくても実装するのは非常に速いです。
この方法を実装したくない場合は、抽象的なストラクチャークラスから継承する独自のクラスを作成することもできます。
このインターフェイスを使用して、新しいarrayTypeクラスを定義する必要があります。目標は、コンテンツの処理を容易にするために、WSDLによって定義されたアレイ構造を中心にユーティリティ方法を提供することです。したがって、このインターフェイスは、StructInterface Interfaceに加えて、ネイティブArrayAccess、Iterator、および可算PHPインターフェイスから継承します
実装する必要がある唯一の方法はgetattributeNameですが、生成されたすべてのarrayTypeクラスで実装されているため、定義する必要はありません。 ArrayTypeクラスで利用可能なものを思い出させるものです。
したがって、基本的に、少なくとも、このインターフェイスが継承するPHPインターフェイスによって宣言された方法をオーバーライドする必要があります
すべてのメソッドを実装したくない場合は、抽象的なストラクチャアレイベースクラスから継承する独自のクラスを作成することもできます。
このインターフェイスを使用して、PackageGeneratorによって生成されたServiceTypeクラスの新しいSoapClient Baseクラスを定義する必要があります。
このインターフェイスとそのユーティリティで定義された定数/オプションは次のとおりです。
locationを備えた非WSDLモードに必要です)trueですWSDL_CACHE_NONE 、 WSDL_CACHE_DISK 、 WSDL_CACHE_MEMORYまたはWSDL_CACHE_BOTHの1つですSOAP_1_1またはSOAP_1_2のいずれかのいずれかのいずれかのいずれかで、SOAP 1.1または1.2をそれぞれ選択します。省略すると、SOAP 1.1が使用されますSOAP_SINGLE_ELEMENT_ARRAYSのビットマスク、 SOAP_USE_XSI_ARRAY_TYPE 、 SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (default)またはSOAP_AUTHENTICATION_DIGESTいずれかですSOAP_SSL_METHOD_TLSの1つ、 SOAP_SSL_METHOD_SSLv2 、 SOAP_SSL_METHOD_SSLv3またはSOAP_SSL_METHOD_SSLv23 実装する必要がある方法とその理由は次のとおりです。
これらすべてのメソッドを実装したくない場合は、AbstractSoapClientBaseクラスから継承する独自のクラスを作成することもできます。
このクラスは、PackageGeneratorによって生成された任意のEnumTypeクラスのベースクラスです。 structenuminterfaceインターフェイスを実装します。 2つの方法を定義します。
getValidValuesメソッドによって返される現在の列点クラス定数に基づいている値を検証するために、デフォルトの動作を定義します。このクラスは、PackageGeneratorによって生成されたStructTypeクラスの基本クラスです。 StructInterfaceインターフェイスを実装します。 5つの方法を定義します。
var_exportを使用して保存したオブジェクトの文字列表現をロードするときに役立ちます。また、 __constructメソッドを使用してインスタンス化するのが難しい多くのプロパティを含むオブジェクトの浸透を緩和することもできます。 __set_state水和法として見ることができます。__setとして、 __set_stateメソッドで使用されます。さらに、SOAPCLIENTのクラスマップオプションによって使用されているクラスで__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このクラスは、PackageGeneratorによって生成された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 ' ,
]));このクラスは、PackageGeneratorによって生成された任意のServiceTypeクラスの基本クラスです。その目標は、SoapClientInterfaceインターフェイスを実装することにより、ユーティリティ/フルな方法を提供することです。クラスには静的プロパティとしてSoapClientオブジェクトがあり、メソッドを適用できるようにするため、基本的にデコレーターのデザインパターンです。これは、複数の呼び出しの間にシングルトンを持つための静的プロパティです(コール間でCookieを自動的に送信できます)。 2番目のパラメーターとしてtrueを渡すことでリセットできます。
このタイプのGenerate 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質問がある場合は、お気軽に問題を作成してください。
MITライセンス(MIT)。詳細については、ライセンスファイルをご覧ください。