Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je suis un peu empêtré avec Zend 1.11 et SOAP.
J'ai créé des services qui permettent de créer des entrées dans une base de données.
Concrètement cela fonctionne.
Cependant j'aimerais récupérer les données de la requête SOAP
dans un format plus facile à traiter.
Pour le moment je récupère un Tableau contenant un Objet contenant un tableau etc..
C'est moche et pas facile à utiliser.
[lang=php]object(stdClass)#50 (1) { ["Table"]=> array(1) { [0]=> object(stdClass)#51 (1) { ["item"]=> array(2) { [0]=> object(stdClass)#52 (2) { ["libelle"]=> string(10) "MaTable_nom" ["value"]=> string(4) "test" } [1]=> object(stdClass)#53 (2) { ["libelle"]=> string(13) "MaTable_prenom" ["value"]=> string(4) "Tutu" } } } } }
J'aimerais récupérer du XML ou un Objet plus propre que cela.
Voilà la déclaration de mon WSDL et de mon Server SOAP :
[lang=php] if(!isset($_GET['wsdl'])) { $helperServerUrl = new Zend_View_Helper_ServerUrl(); $serverUrl = $helperServerUrl->serverUrl(); $uri = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri(); $wsdl = $serverUrl.$uri.'?wsdl'; $server = new Zend_Soap_Server($wsdl, $options); $server->setClass('DBSynchronizer'); $server->handle(); }else{ $wsdl = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_AnyType'); $wsdl->setBindingStyle( array('style' => 'document') ); $wsdl->setClass('DBSynchronizer'); $wsdl->handle(); }
Je ne sais pas comment récupérer et exploiter correctement la requête SOAP.
merci pour vos idées.
Hors ligne
Bonjour,
Je n'ai que très peu d'expérience dans ce domaine, mais de ce que je comprends, et tu me diras si je me trompe, mais il te manque une partie
http://framework.zend.com/manual/1.12/f … se.request
[lang=php] $server->setRequest();
Ou celle-là
[lang=php] $server->handle($request);
Qui te permettrai de gérer le format de l'objet Request au format souhaité, de ce que je vois le format par défaut est donc un objet de type stdClass mais tu peux aussi le mettre au format XML, DOMDocument, DOMNOde ou SimpleXMLElement...
J'attends ton retour
Bonne journée à toi
Hors ligne
La Method setRequest n'existe pas.
Je cite un commentaire
"Zend_Soap_Server class has no method setRequest as it is said in this page!"
La doc Zend contient une erreur, ou alors cette fonction est apparu avec la 1.12.
Je suis à la 1.11.
Par contre il existe une fonction privée de Zend_Soap_Server _setRequest(),
mais elle ne peut pas m'aider du coup.
Dernière modification par RodFrank (21-04-2015 15:22:13)
Hors ligne
Bonjour,
D'après le code de la master sur Github, à l'heure actuelle on a toujours uniquement une méthode protégée _setRequest, qui est appelée dans handle. Pour une requête personnalisée il suffit donc de la passer en paramètre dans handle.
Le code présenté ne montre pas la récupération et l'affichage du tableau trop complexe. Serait-il possible d'avoir un peu plus de code et possiblement une copie de la requête ?
Hors ligne
Bonjour,
Oui la méthode setRequest n'est pas disponible, mais comme l'a montré Théocrite en te montrant le code source de cette classe, le try catch de la méthode handle appelle _setRequest. Tu peux donc directement passer par
[lang=php] $server->handle($request);
Hors ligne
voilà la class DBSynchronizer
class DBSynchronizer { /** * * @param TableSchema $table * @throws SoapFault * @return SynchronizerResponse */ public function addTable($table) { //Ici je fait un var_dump qui me donne //un Tableau contenant un Objet contenant un tableau etc.. var_dump($table); //Traitements qui ne nous intéresse pas...... } }
Voila les class associées à ma fonction
class TableSchema { /** *** @var FieldSchema[] * */ public $fields; } class FieldSchema { /** * @var string */ public $libelle; /** * @var string */ public $value; } class SynchronizerResponse { /** * @var string */ public $code; /** * @var string */ public $message; }
Désolé, il se peut qu'il y est un manque de cohérence car j'ai volontairement retiré beaucoup de code pour simplifié.
Ce qui m'échappe c'est ce qui se passe entre handle de Zend_Soap_Server et la function addTable().
SI je comprend bien le code de Zend_Soap_Server::handle() et de Zend_Soap_Server->__setRequest()
quoi qu'i arrive il transforme ma reque XML en string.
Ensuite je ne comprend pas comment il transmet cette string à ma fonction addTable().
Dernière modification par RodFrank (22-04-2015 15:07:02)
Hors ligne
Pages: 1