Les classes qui sont utilisées par les classes générées par le projet PackageGenerator pour faciliter le SOAPClient UX.
L'objectif est de fournir des classes génériques et utiles qui sont au-dessus des classes générées par le projet PackageGenerator.
Par exemple, il permet de traverser facilement les éléments de tableau d'une propriété d'objet de résultat SOAP, il permet de définir facilement les en-têtes HTTP et SOAP pour une demande de savon et permet de remplir facilement un objet à partir de sa représentation d'état de tableau.
Les interfaces définies doivent être utilisées afin de pouvoir faire correspondre les exigences des classes générées par package.
Cette interface doit être utilisée pour définir une nouvelle classe EnumType.
Il y a au moins / la plupart d'une méthode qui doit être implémentée, il est donc assez rapide de l'implémenter même si vous n'en voyez pas l'objectif:
$value passée est valide. Cela peut être fait en utilisant le tableau de chaîne renvoyé par la méthode getValidValues toujours présente dans les classes ENUM générées.Si vous ne souhaitez pas implémenter cette méthode, vous pouvez également créer votre propre classe qui hérite de notre classe AbstractTructTumbase.
Cette interface doit être utilisée pour définir une nouvelle classe StructType.
Il y a au moins / la plupart d'une méthode qui doit être implémentée, il est donc assez rapide de l'implémenter même si vous n'en voyez pas l'objectif:
Si vous ne souhaitez pas implémenter cette méthode, vous pouvez également créer votre propre classe qui hérite de notre classe AbstractStructBase.
Cette interface doit être utilisée pour définir une nouvelle classe ArrayType. L'objectif est de fournir des méthodes d'utilité autour des structures de tableau définies par le WSDL afin de faciliter la gestion de son contenu. Par conséquent, cette interface hérite de notre interface StruntInterface plus l'interfaces Native ArrayAccess, Iterator et Notmable PHP
La seule méthode qui doit être mise en œuvre serait GetAtTrributeName mais sachez qu'elle est implémentée dans chaque classe ArrayType générée, donc pas besoin de le définir. C'est juste un rappel de ce qui est disponible dans les classes ArrayType.
Donc, en gros, vous devez au moins remplacer les méthodes déclarées par les interfaces PHP à partir desquelles cette interface hérite
Si vous ne souhaitez pas implémenter toutes les méthodes, vous pouvez également créer votre propre classe qui hérite de notre classe AbstractSTructArrayBase.
Cette interface doit être utilisée pour définir une nouvelle classe de base SoapClient pour toute classe ServiceType générée par PackageGenerator.
Voici les constantes / options définies par cette interface et leur utilité:
location )trueWSDL_CACHE_BOTH option est WSDL_CACHE_NONE une WSDL_CACHE_DISK WSDL_CACHE_MEMORYSOAP_1_1 ou SOAP_1_2 pour sélectionner SOAP 1.1 ou 1.2, respectivement. Si omis, SOAP 1.1 est utiliséSOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (par défaut) ou SOAP_AUTHENTICATION_DIGESTSOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 ou SOAP_SSL_METHOD_SSLv23 Voici les méthodes qui doivent être mises en œuvre et pourquoi:
Si vous ne souhaitez pas implémenter toutes ces méthodes, vous pouvez également créer votre propre classe qui hérite de notre classe AbstractoApClientBase.
Cette classe est la classe de base pour toute classe EnumType générée par PackageGenerator. Il implémente notre interface StrutenumInterface. Il définit deux méthodes:
getValidValues . Cette classe est la classe de base pour toute classe StructType générée par PackageGenerator. Il implémente notre interface StructInterface. Il définit cinq méthodes:
var_export . Il vous permet également de soulager l'instanciation d'un objet qui contient de nombreuses propriétés qui seraient difficiles à instancier en utilisant la méthode __construct . Vous pouvez voir __set_state comme méthode d'hydratation.__set mais utilisée par la méthode __set_state . De plus, la définition de la méthode __set sur la classe utilisée par l'option ClassMap pour le SOAPClient rompt l'hydratation correcte de vos objets reçus.__get . Utilisé par notre classe 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 Cette classe est la classe de base pour toute classe ArrayType générée par packageGenerator. Il implémente notre interface StructureRayInterface.
Dès que vous avez un élément qui est un tableau d'articles tels que:
$ 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 de méthodes length : vous donne le nombre d'éléments contenus par votre objet 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 ' ,
])); Cette classe est la classe de base pour toute classe ServiceType générée par PackageGenerator. Son objectif est de fournir des méthodes utilitaires / poignées en implémentant notre interface SoapClientInterface. Il s'agit essentiellement d'un motif de conception de décorateur car la classe a l'objet Soapclient comme une propriété statique afin de pouvoir y appliquer des méthodes. Il s'agit d'une propriété statique afin d'avoir un singleton entre plusieurs appels (permettant d'envoyer des cookies automatiquement entre les appels). Il peut être réinitialisé en passant vrai comme le deuxième paramètre.
Supposons que vous ayez ce type de classe Générer 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 ;
}
}
}Vous pouvez faire:
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 );Ensuite, appelez l'une de ces méthodes de base:
DOMDocument de la demandeDOMDocument de la réponse$this->saveLastError(__METHOD__, $soapFault) est appelé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 );
}Vous avez des méthodes supplémentaires telles que:
// 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 );
}N'hésitez pas à faire des demandes de traction. Nous les étudierons et vous ferons savoir quand il peut être intégré.
Vous pouvez exécuter les tests unitaires avec la commande suivante:
$ cd /path/to/src/WsdlToPhp/PackageBase/
$ composer install
$ composer test
Grâce à l'image docker de phpFarm, les tests peuvent être exécutés localement sous n'importe quelle version PHP à l'aide de la CLI:
Tout d'abord, vous devez créer votre conteneur que vous pouvez faire en utilisant Docker-Compose en exécutant la ligne de commande ci-dessous à partir du répertoire racine du projet:
$ docker-compose up -d --build Vous avez ensuite un conteneur nommé package_base dans lequel vous pouvez exécuter des commandes composer et des commandes php cli telles que:
# 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/phpunitSi vous avez une question, n'hésitez pas à créer un problème.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.