Retornar objeto com zend_soap
-
25-09-2019 - |
Pergunta
Eu gostaria de devolver um objeto usando zend_soap. Eu também quero o objeto fornecido no arquivo WSDL. Mas não consigo fazer os dois trabalharem juntos. É um ou outro.
1. WSDL funcionando, mas objeto não retornando
Se no phpdoc da minha função no script do servidor de sabão, escrevo
@return Application_Model_Soap_Test
Eu posso ver isso no arquivo wsdl
<message name="getPostcodeOut">
<part name="return" type="tns:Application_Model_Soap_Test"/>
</message>
Mas quando eu corro o script, ele retorna uma aula vazia:
stdClass Object
(
)
2. Obtenha objeto, mas WSDL errado
Se eu alterar a informação phpdoc da função do servidor para
@return mixed Application_Model_Soap_Test
Recebo um objeto de volta com informações:
stdClass Object
(
[name] => Fred
[age] => 40
)
Mas o arquivo WSDL está errado
<message name="getPostcodeOut">
<part name="return" type="xsd:anyType"/>
</message>
Alguma ideia? Obrigado.
Solução
Você precisa passar uma variável de opção 'Classmap' no cliente.
Veja os dois http://www.php.net/manual/en/soapclient.soapclient.php e http://www.php.net/manual/en/soapclient.soapclient.php Sobre a opção 'ClassMap' passada na matriz de opções.
Basicamente, deve ser uma matriz mapeando suas classes para as classes definidas como os objetos retornados no arquivo WSDL.
Outras dicas
Você tentou desligar o cache?
No PHP, como você pode limpar um cache WSDL?
Eu tive o mesmo problema. Cada solicitação que eu fiz devolveu -me um stdclass vazio, mesmo que o WSDL estivesse correto. Depois de desativar o cache, funcionou bem para mim. De uma chance.