Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai une classe de base :
class Soap_ClientController extends Zend_Controller_Action { // URL du WSDL const _wsdl = "http://localhost/SOAP/SOAP_ext/HelloYou2.wsdl"; // Client SOAP protected $client = null; // Réponse SOAP protected $response = null; /** * Constructeur */ public function __construct(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response, $invokeArgs) { //$wsdl = $wsdl && is_string($wsdl) ? $wsdl : self::_wsdl; try { $this->client = new SoapClient($wsdl); } catch (SoapFault $error) { //TODO GESTION DE L ERREUR + ecriture en LOG echo "Erreur dans le nom du service."; } }
Mon controlleur de Test qui étend celui du dessus :
<?php require_once('ClientController.php'); class TestClientController extends Soap_ClientController { function indexAction(){ $this->testsoapAction(); } function testsoapAction() { try { $client = new Soap_Client("http://sep181/app/conf/test3.wsdl"); $client->__Call('getAlbumByIdAction',array('blabla' =>'qsd2','id'=>'2')); } catch (Exception $error) { var_dump($error->getMessage()); } } } ?>
J'aimerai pouvoir récuperer dans le contructeur de Soap_ClientController, le paramètre "http://sep181/app/conf/test3.wsdl" que j'ai passé à l'instanciation $client = new Soap_Client("http://sep181/app/conf/test3.wsdl");
Auriez vous une idée de comment cela se fait?
Hors ligne
Salut sebondus,
Ca n'est pas possible : quand tu es dans testsoapAction de TestClientController , le constructueur de Soap_ClientController a déjà été appelé (depuis belle lurette).
J'ai un peu de mal à te donner une réponse plus constructive, parce que je n'ai pas bien compris ce que tu voulais faire avec ton constructeur.
A priori, si tu veux juste vérifier qu'il y a un wsdl valide, tu as intérêt à te créer ta propre classe MySoapClient qui va vérifier la validité du wsdl avant de faire l'appel.
A+, Philippe
Hors ligne
Attention, le documentation explique que ce n'est pas un super idée de surcharger le constructeur du contrôleur d'action:
http://framework.zend.com/manual/fr/zen … ialization
Hors ligne
Bonjour,
Tu fais quelque chose que je ne ferais pas :
ton Soap_ClientController extends Zend_Controller_Action
ne doit pas être un controller (c'est un clientsoap rien de plus).
tu devrais a mon avis avoir : TestClientController qui étend Zend_Controller_Action
et Soap_ClientController qui etends SoapClient avec :
en gros :
<?php class Sebondus_SoapClient extends SoapClient { // URL du WSDL // ici on mets un champs et non une constante : protecd $Monwsdl = "http://localhost/SOAP/SOAP_ext/HelloYou2.wsdl"; /** * Constructeur */ public function __construct($wsdl= "monwsdlParDefault.wsdl") // on passe l'adresse du wsdl { // TU peux Faire tes verification sur le wsdl ici $this->Monwsdl = $wsdl; try { parent::__contruct($this->Monwsdl); // on instancie le parent(SoapClient) } catch (SoapFault $error) { //TODO GESTION DE L ERREUR + ecriture en LOG echo "Erreur dans le nom du service."; } } ?> <?php require_once('Sebondus_SoapClient.php'); class TestClientController extends Zend_Controller_Action { function indexAction(){ $this->testsoapAction(); } function testsoapAction() { try { $client = new Sebondus_SoapClient("http://sep181/app/conf/test3.wsdl"); $client->__Call('getAlbumByIdAction',array('blabla' =>'qsd2','id'=>'2')); } catch (Exception $error) { var_dump($error->getMessage()); } } } ?>
j'ai codé sans tester, il doit y avoir des coquilles ...
Voila , jespere que ca peux t'aider ...
Dernière modification par ichevc02 (07-04-2008 12:47:21)
Hors ligne
Ah oui exact grosse erreur de conception
Le Sebondus_SoapClient ça claque quand même !
ichevc02 j'ai pas répondu à ton dernier mail, j'ai trouvé une solution à mon probleme, je t'en ferai part si ça t'interresse bien sur.
En tout cas, je suis parti des infos que tu m'as donné, et tu avais vu juste .
Hors ligne