Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 21-04-2015 12:12:53

RodFrank
Nouveau membre
Date d'inscription: 25-03-2014
Messages: 6

[1.11][Zend_Soap_AutoDiscover] récupére le contenu d'une requéte SOAP

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.

Code:

[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 :

Code:

[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

 

#2 21-04-2015 12:29:14

JGreco
Modérateur
Date d'inscription: 22-12-2012
Messages: 421

Re: [1.11][Zend_Soap_AutoDiscover] récupére le contenu d'une requéte SOAP

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

Code:

[lang=php]
$server->setRequest();

Ou celle-là

Code:

[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 smile

Bonne journée à toi


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 21-04-2015 15:20:26

RodFrank
Nouveau membre
Date d'inscription: 25-03-2014
Messages: 6

Re: [1.11][Zend_Soap_AutoDiscover] récupére le contenu d'une requéte SOAP

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

 

#4 21-04-2015 17:26:21

Théocrite
Administrateur
Lieu: Dijon, Paris, Edinburgh
Date d'inscription: 23-12-2009
Messages: 608
Site web

Re: [1.11][Zend_Soap_AutoDiscover] récupére le contenu d'une requéte SOAP

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

 

#5 21-04-2015 18:01:45

JGreco
Modérateur
Date d'inscription: 22-12-2012
Messages: 421

Re: [1.11][Zend_Soap_AutoDiscover] récupére le contenu d'une requéte SOAP

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

Code:

[lang=php]
$server->handle($request);

ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#6 22-04-2015 14:56:47

RodFrank
Nouveau membre
Date d'inscription: 25-03-2014
Messages: 6

Re: [1.11][Zend_Soap_AutoDiscover] récupére le contenu d'une requéte SOAP

voilà la class DBSynchronizer

Code:

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

Code:

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

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages