Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-04-2008 11:25:02

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Comment passer des arguments à un contructeur ?

Bonjour,

J'ai une classe de base :

Code:

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 :

Code:

<?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

 

#2 07-04-2008 11:46:43

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Comment passer des arguments à un contructeur ?

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


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 07-04-2008 11:58:17

fizzbanana
Membre
Date d'inscription: 29-05-2007
Messages: 40

Re: Comment passer des arguments à un contructeur ?

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

 

#4 07-04-2008 12:45:00

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: Comment passer des arguments à un contructeur ?

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 :

Code:

<?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

 

#5 07-04-2008 12:50:49

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Comment passer des arguments à un contructeur ?

Ah oui exact grosse erreur de conception wink
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 wink.

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