Klassen, die von den Klassen verwendet werden, die vom PaketGenerator -Projekt generiert werden, um den SOAPCLIENT UX zu erleichtern.
Ziel ist es, generische und nützliche Klassen bereitzustellen, die über den vom PaketGenerator -Projekt generierten Klassen stehen.
Beispielsweise ermöglicht es, die Array -Elemente einer SOAP -Ergebnisobjekteigenschaft leicht zu durchqueren, die HTTP- und SOAP -Header für eine SOAP -Anforderung einfach festlegen und ein Objekt einfach aus seiner Array -Statusdarstellung zu füllen können.
Die definierten Schnittstellen müssen verwendet werden, um die Anforderungen für den paketgenerator generierten Klassen entsprechen zu können.
Diese Schnittstelle muss verwendet werden, um eine neue Enumtyp -Klasse zu definieren.
Es gibt mindestens/die meisten Methoden, die implementiert werden muss, sodass es ziemlich schnell ist, es zu implementieren, auch wenn Sie das Ziel nicht sehen:
$value gültig ist. Dies kann mit dem von der getValidValues -Methode zurückgegebenen String -Array erfolgen, der immer in den generierten Enum -Klassen vorhanden ist.Wenn Sie diese Methode nicht implementieren möchten, können Sie auch Ihre eigene Klasse erstellen, die von unserer Abstruderstructenumbase -Klasse erbt.
Diese Schnittstelle muss verwendet werden, um eine neue Strukturklasse zu definieren.
Es gibt mindestens/die meisten Methoden, die implementiert werden muss, sodass es ziemlich schnell ist, es zu implementieren, auch wenn Sie das Ziel nicht sehen:
Wenn Sie diese Methode nicht implementieren möchten, können Sie auch Ihre eigene Klasse erstellen, die von unserer AbstractStructBase -Klasse erbt.
Diese Schnittstelle muss verwendet werden, um eine Neuarraytyp -Klasse zu definieren. Ziel ist es, die von der WSDL definierten Array -Strukturen für Array -Strukturen bereitzustellen, um die Behandlung ihres Inhalts zu erleichtern. Daher erbt diese Schnittstelle aus unserer Strukturinterface -Schnittstelle sowie den Native ArrayAccess, Iterator und zählbaren PHP -Schnittstellen
Die einzige Methode, die implementiert werden muss, wäre GetArtributename, aber seien Sie sich bewusst, dass sie in jeder generierten ArrayType -Klasse implementiert ist, sodass sie nicht definiert werden müssen. Es ist nur eine Erinnerung an das, was in ArrayTyp -Klassen verfügbar ist.
Grundsätzlich müssen Sie also die von den PHP -Schnittstellen deklarierten Methoden zumindest überschreiben, von denen diese Schnittstelle erbt
Wenn Sie nicht alle Methoden implementieren möchten, können Sie auch Ihre eigene Klasse erstellen, die von unserer AbstractStructArraybase -Klasse erbt.
Diese Schnittstelle muss verwendet werden, um eine neue Soapclient -Basisklasse für jede von PaketGenerator generierte ServiceType -Klasse zu definieren.
Hier sind die Konstanten/Optionen, die von dieser Schnittstelle und ihrem Dienstprogramm definiert sind:
location )trueWSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY oder WSDL_CACHE_BOTHSOAP_1_1 oder SOAP_1_2 , um SOAP 1.1 bzw. 1.2 auszuwählen. Wenn es weggelassen wird, wird SOAP 1.1 verwendetSOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (Standard) oder SOAP_AUTHENTICATION_DIGEST seinSOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 oder SOAP_SSL_METHOD_SSLv23 Hier sind die Methoden, die implementiert werden müssen und warum:
Wenn Sie nicht alle diese Methoden implementieren möchten, können Sie auch Ihre eigene Klasse erstellen, die von unserer AbstractSoapclientbase -Klasse erbt.
Diese Klasse ist die Basisklasse für jede von PaketGenerator generierte EnumType -Klasse. Es implementiert unsere Consternuminterface -Schnittstelle. Es definiert zwei Methoden:
getValidValues -Methode zurückgegeben wurden. Diese Klasse ist die Basisklasse für jede StructType , die von PackageGenerator generiert wird. Es implementiert unsere Strukturinterface -Schnittstelle. Es definiert fünf Methoden:
var_export gespeichert haben. Es ermöglicht Ihnen auch, die Instanziierung eines Objekts zu lindern, das viele Eigenschaften enthält, die mit der __construct -Methode schwer zu instanziieren wären. Sie können __set_state als Hydratationsmethode sehen.__set , aber von der __set_state -Methode verwendet. Das Definieren __set -Methode in der gebrauchten Klasse nach der ClassMap -Option für den Soapclient bricht die korrekte Hydratation Ihrer empfangenen Objekte aus.__get . Wird von unserer AbstractStructArraybase -Klasse verwendet. $ 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 Diese Klasse ist die Basisklasse für jede von PaketGenerator generierte ArrayType -Klasse. Es implementiert unsere StructArrayInterface -Schnittstelle.
Sobald Sie ein Element haben, das eine Reihe von Elementen wie:
$ 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 aufrufen, length : Geben Sie die Anzahl der von Ihrem Objekt enthaltenen Elemente an 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 ' ,
])); Diese Klasse ist die Basisklasse für jede ServiceType -Klasse, die von PackageGenerator generiert wird. Sein Ziel ist es, Dienstprogramm-/Handvoll -Methoden bereitzustellen, indem unsere Schnittstelle zum SOAPCLIENTInterface implementiert wird. Es handelt sich im Grunde genommen um ein Dekorateur -Designmuster, da die Klasse das Soapclient -Objekt als statische Eigenschaft hat, um Methoden darauf anzuwenden. Es handelt sich um eine statische Eigenschaft, um einen Singleton zwischen mehreren Anrufen zu haben (so dass das Senden von Cookies automatisch zwischen Anrufen gesendet wird). Es kann zurückgesetzt werden, indem er als zweiter Parameter übergeben wird.
Nehmen wir an, Sie haben diese Art von Erzeugung ServiceType -Klasse:
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 ;
}
}
}Sie können:
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 );Rufen Sie dann eine dieser Grundmethoden an:
DOMDocument -Version der Anforderung zurückDOMDocument -Version der Antwort zurück$this->saveLastError(__METHOD__, $soapFault) aufgerufen wirdSoapFault -Objekt zurückgeben $ 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 );
}Sie haben zusätzliche Methoden wie:
// 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 );
}Fühlen Sie sich frei, einige Zuganfragen zu stellen. Wir werden sie studieren und Sie wissen lassen, wann es integriert werden kann.
Sie können die Unit -Tests mit dem folgenden Befehl ausführen:
$ cd /path/to/src/WsdlToPhp/PackageBase/
$ composer install
$ composer test
Dank des Docker -Bildes von PHPFARM können Tests unter Verwendung der CLI lokal unter jeder PHP -Version durchgeführt werden:
Zunächst müssen Sie Ihren Container erstellen, den Sie mit Docker-Compose durchführen können, indem Sie die folgende Befehlszeile aus dem Stammverzeichnis des Projekts ausführen:
$ docker-compose up -d --build Anschließend haben Sie einen Container namens package_base , in dem Sie Befehle composer und php cli -Befehlen ausführen können, z. B.:
# 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/phpunitWenn Sie eine Frage haben, können Sie gerne ein Problem erstellen.
Die MIT -Lizenz (MIT). Weitere Informationen finden Sie unter Lizenzdatei.