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