Classes que são usadas pelas classes geradas pelo projeto PackageGenerator para facilitar o SoapClient UX.
O objetivo é fornecer classes genéricas e úteis que estão no topo das classes geradas pelo projeto PackageGenerator.
Por exemplo, ele permite fazer um loop facilmente através dos elementos da matriz de uma propriedade de objeto de SOAP, permite definir facilmente cabeçalhos HTTP e sabão para uma solicitação de sabão e permite preencher facilmente um objeto de sua representação do estado da matriz.
As interfaces definidas devem ser usadas para poder corresponder aos requisitos para as classes geradas pelo PackageGenerator.
Essa interface deve ser usada para definir uma nova classe Enumtype.
Existe pelo menos/mais um método que deve ser implementado, por isso é muito rápido implementá -lo, mesmo que você não veja o objetivo dele:
$value aprovado seja válido. Isso pode ser feito usando a matriz de string retornada pelo método getValidValues sempre presente nas classes de enum geradas.Se você não deseja implementar esse método, também poderá criar sua própria classe que herda a nossa classe AbstractStructenumbase.
Essa interface deve ser usada para definir uma nova classe Structype.
Há pelo menos um método que deve ser implementado, por isso é muito rápido implementá -lo, mesmo que você não veja o objetivo disso:
Se você não deseja implementar esse método, também poderá criar sua própria classe que herda da nossa classe AbstractStructBase.
Essa interface deve ser usada para definir uma nova classe ArrayType. O objetivo é fornecer métodos utilitários em torno de estruturas de matriz definidas pelo WSDL para facilitar o manuseio de seu conteúdo. Portanto, essa interface herda da nossa interface da StructInterface, além do ArrayAccess, iterador e interfaces de PHP contáveis nativas
O único método que deve ser implementado seria o nome GetAttributen , mas esteja ciente de que ele é implementado em todas as classes de ArrayType geradas, para que não seja necessário defini -lo. É apenas um lembrete do que está disponível nas classes ArrayType.
Então, basicamente, você deve pelo menos substituir os métodos declarados pelas interfaces PHP das quais essa interface herda
Se você não deseja implementar todos os métodos, também poderá criar sua própria classe que herda da nossa classe AbstractStrucTArrayBase.
Essa interface deve ser usada para definir uma nova classe base de sabão para qualquer classe ServiceType gerada pelo PackageGenerator.
Aqui estão as constantes/opções definidas por esta interface e sua utilidade:
location )trueWSDL_CACHE_NONE , WSDL_CACHE_DISK , WSDL_CACHE_MEMORY ou WSDL_CACHE_BOTHSOAP_1_1 ou SOAP_1_2 para selecionar SOAP 1.1 ou 1.2, respectivamente. Se omitido, o sabão 1.1 é usadoSOAP_SINGLE_ELEMENT_ARRAYS , SOAP_USE_XSI_ARRAY_TYPE , SOAP_WAIT_ONE_WAY_CALLSSOAP_AUTHENTICATION_BASIC (padrão) ou SOAP_AUTHENTICATION_DIGESTSOAP_SSL_METHOD_TLS , SOAP_SSL_METHOD_SSLv2 , SOAP_SSL_METHOD_SSLv3 ou SOAP_SSL_METHOD_SSLv23 Aqui estão os métodos que devem ser implementados e por quê:
Se você não deseja implementar todos esses métodos, também poderá criar sua própria classe que herda da nossa classe AbstractSoApClientBase.
Esta classe é a classe base para qualquer classe EnumType gerada pelo PackageGenerator. Ele implementa nossa interface StructenumInterface. Ele define dois métodos:
getValidValues . Esta classe é a classe base para qualquer classe StructType gerada pelo PackageGenerator. Ele implementa nossa interface do StructInterface. Ele define cinco métodos:
var_export . Ele também permite aliviar a instância de um objeto que contém muitas propriedades que seriam difíceis de instanciar usando o método __construct . Você pode ver __set_state como um método de hidratação.__set , mas usado pelo método __set_state . Além disso, a definição do método __set na classe usada pela opção ClassMap para o SoapClient quebra a hidratação correta de seus objetos recebidos.__get . Usado por nossa 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 Esta classe é a classe base para qualquer classe ArrayType gerada pelo PackageGenerator. Ele implementa nossa interface StructArrayInterface.
Assim que você tiver um elemento que seja uma variedade de itens 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 : fornece o número de itens contidos pelo seu 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 classe é a classe base para qualquer classe ServiceType gerada pelo PackageGenerator. Seu objetivo é fornecer métodos utilitários/punhados implementando nossa interface SoapClientInterface. É basicamente um padrão de design do decorador, pois a classe possui o objeto SoapClient como uma propriedade estática para poder aplicar métodos nela. É uma propriedade estática para ter um singleton entre várias chamadas (permitindo enviar cookies automaticamente entre as chamadas). Pode ser redefinido passando verdadeiro como o segundo parâmetro.
Digamos que você tenha esse tipo de classe Gerate 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 ;
}
}
}Você pode fazer:
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 );Em seguida, ligue para qualquer um desses métodos básicos:
DOMDocument da solicitaçãoDOMDocument da resposta$this->saveLastError(__METHOD__, $soapFault) é chamadoSoapFault $ 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 );
}Você tem métodos adicionais 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 );
}Sinta -se à vontade para fazer algumas solicitações de tração. Vamos estudá -los e informar quando puder ser integrado.
Você pode executar os testes de unidade com o seguinte comando:
$ cd /path/to/src/WsdlToPhp/PackageBase/
$ composer install
$ composer test
Graças à imagem do Docker do PHPFARM, os testes podem ser executados localmente em qualquer versão PHP usando a CLI:
Primeiro de tudo, você precisa criar seu contêiner, o que você pode fazer usando o Docker-Compose, executando a linha de comando abaixo no diretório raiz do projeto:
$ docker-compose up -d --build Você tem um contêiner chamado package_base no qual pode executar comandos composer e 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/phpunitSe você tiver uma pergunta, fique à vontade para criar um problema.
A licença do MIT (MIT). Consulte o arquivo de licença para obter mais informações.