Clases que utilizan las clases generadas por el proyecto PackageGenerator para aliviar el SoapClient UX.
El objetivo es proporcionar clases genéricas y útiles que estén al tanto de las clases generadas por el proyecto PackageGenerator.
Por ejemplo, permite realizar fácilmente los elementos de matriz de una propiedad de objeto de resultado SOAP, permite establecer fácilmente los encabezados HTTP y SOAP para una solicitud de jabón y permite completar fácilmente un objeto desde su representación de estado de matriz.
Las interfaces definidas deben usarse para poder hacer coincidir los requisitos para las clases generadas por el paquete Generator.
Esta interfaz debe usarse para definir una nueva clase enumType.
Hay al menos/la mayoría de un método que debe implementarse, por lo que es bastante rápido implementarlo, incluso si no ve el objetivo:
$value aprobado sea válido. Esto se puede hacer utilizando la matriz de cadena devuelta por el método getValidValues siempre presente en las clases de Enum generadas.Si no desea implementar este método, también puede crear su propia clase que herede de nuestra clase AbstractStructenumbase.
Esta interfaz debe usarse para definir una nueva clase StructType.
Hay al menos/la mayoría de un método que debe implementarse, por lo que es bastante rápido implementarlo, incluso si no ve el objetivo:
Si no desea implementar este método, también puede crear su propia clase que herede de nuestra clase AbstractStructbase.
Esta interfaz debe usarse para definir una nueva clase ArrayType. El objetivo es proporcionar métodos de utilidad alrededor de las estructuras de matriz definidas por el WSDL para aliviar el manejo de su contenido. Por lo tanto, esta interfaz hereda de nuestra interfaz Structinterface más las interfaces nativas de ArrayAccess, Iterator e contable PHP
El único método que debe implementarse sería GetAttributeName , pero tenga en cuenta que se implementa en cada clase de matriz generada, por lo que no es necesario definirlo. Es solo un recordatorio de lo que está disponible en las clases de ArrayType.
Entonces, básicamente, al menos debe anular los métodos declarados por las interfaces PHP de las cuales esta interfaz hereda
Si no desea implementar todos los métodos, también puede crear su propia clase que herede de nuestra clase AbstractStructArrayBase.
Esta interfaz debe usarse para definir una nueva clase base de SoapClient para cualquier clase ServiceType generada por PackageGenerator.
Aquí están las constantes/opciones definidas por esta interfaz y su utilidad:
location )trueWSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY o WSDL_CACHE_BOTHSOAP_1_1 o SOAP_1_2 para seleccionar SOAP 1.1 o 1.2, respectivamente. Si se omite, se usa SOAP 1.1SOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (predeterminado) o SOAP_AUTHENTICATION_DIGESTSOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 o SOAP_SSL_METHOD_SSLv23 Estos son los métodos que deben implementarse y por qué:
Si no desea implementar todos estos métodos, también puede crear su propia clase que herede de nuestra clase AbstractSoApClientBase.
Esta clase es la clase base para cualquier clase EnumType generada por PackageGenerator. Implementa nuestra interfaz StructenumInterface. Define dos métodos:
getValidValues . Esta clase es la clase base para cualquier clase StructType generada por Paquete Generator. Implementa nuestra interfaz Structinterface. Define cinco métodos:
var_export . También le permite aliviar la instanciación de un objeto que contiene muchas propiedades que serían difíciles de instanciar utilizando el método __construct . Puede ver __set_state como un método de hidratación.__set pero utilizado por el método __set_state . Además, la definición del método __set en la clase usada por la opción ClassMap para el SoapClient rompe la hidratación correcta de sus objetos recibidos.__get . Utilizado por nuestra clase 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 Esta clase es la clase base para cualquier clase ArrayType generada por PackageGenerator. Implementa nuestra interfaz StructraRayInterface.
Tan pronto como tenga un elemento que sea una variedad de elementos como:
$ 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 , métodos length : le brinda la cantidad de elementos contenidos por su objeto 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 ' ,
])); Esta clase es la clase base para cualquier clase ServiceType generada por PackageGenerator. Su objetivo es proporcionar métodos de utilidad/puñado mediante la implementación de nuestra interfaz SoapClientInterface. Básicamente es un patrón de diseño del decorador, ya que la clase tiene el objeto SoapClient como propiedad estática para poder aplicar métodos. Es una propiedad estática para tener un singleton entre múltiples llamadas (que permite enviar cookies automáticamente entre llamadas). Se puede restablecer pasando verdadero como el segundo parámetro.
Supongamos que tiene este tipo de clase Generar 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 ;
}
}
}Puedes hacer:
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 );Luego llame a cualquiera de estos métodos base:
DOMDocument de la solicitudDOMDocument de la respuesta$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 );
}Tiene métodos adicionales como:
// 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 );
}Siéntase libre de hacer algunas solicitudes de extracción. Los estudiaremos y le haremos saber cuándo se puede integrar.
Puede ejecutar las pruebas unitarias con el siguiente comando:
$ cd /path/to/src/WsdlToPhp/PackageBase/
$ composer install
$ composer test
Gracias a la imagen Docker de PhPFarm, las pruebas se pueden ejecutar localmente bajo cualquier versión de PHP usando la CLI:
En primer lugar, debe crear su contenedor que pueda hacer utilizando Docker-Compose ejecutando la línea de comandos a continuación desde el directorio raíz del proyecto:
$ docker-compose up -d --build Luego tiene un contenedor llamado package_base en el que puede ejecutar comandos composer y comandos php cli como:
# 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 tiene una pregunta, no dude en crear un problema.
La licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.