Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-05-2010 10:14:50

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Zend_Json_Server problème de récupération de mon Json

Bonjour tout le monde,

Alors voila, je souhaite créer mon premier WebService en PHP, et je souhaite que celui-ci me renvoie du JSON.
Donc tout naturellement, je me suis orienté vers Zend_Json_Server.

Mais j'ai quelque soucis pour qu'il me renvoie correctement mon Json.

Je vous fournis mon code :

Mon Controlleur :

Code:

public function wsappreAction()
    {
        // action body
        $this->_helper->layout->disableLayout();    //disable layout
        $this->_helper->viewRenderer->setNoRender();
        
        $q = $_GET['q'];
        
        $server = new Zend_Json_Server ();
        $server->setClass('Application_Model_AppreciationsMapper');
        $server->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
        
        //smd est de type Zend_Json_Server_Smd
        $smd = $server->getServiceMap();
        
        //On va donc récupérer que le service qui nous intéresse
          $myservice = $smd->getService('WSAppreciation');
          $myservice->addParam($q);
          $return = $myservice->toJson();
        /*$smd->getService('WSAppreciation');*/
        
        header('Content-Type: application/json');
        echo $return;
        
        return;

        $server->handle();
                
    }

Voici donc l'action qui me permet de traiter mon Service.


Et dans la classe Application_Model_AppreciationsMapper :

Code:

public function WSAppreciation($debut) {
        $entries = $this->fetchAll();
        
        $mytab = array();
        foreach($entries as $appre) {
            $mytab[] = $appre->appreciation;
        }
        
        header('Content-type: application/json');
        echo json_encode(array('appreciation'=>$mytab));
    }

Je pense que y a pas vraiment besoin d'expliquer mon code dans le Mapper, mais je vais le faire quand même.
Ca récupère les enregistrements dans une table, çà me récupère juste une partie que je met dans un tableau.
Et j'encode çà en Json (c'est peut être en partie là l'erreur, mais j'ai essayé d'autre chose sans succès).

Donc voila, si vous pouviez m'aider.
ps : La classe mapper posséde plusieurs méthode, c'est pour çà que dans le controlleur, je ne souhaite récupérer que la méthode (service) WSAppreciation.

Merci d'avance.

Hors ligne

 

#2 10-05-2010 10:43:01

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Json_Server problème de récupération de mon Json

je ne me souvient pas mais je ne suis pas sur qu'avec json serveur il faille faire un écho
il me semblait qu'il y avait un membre du contrôleur à renseigner genre
$this->response =
j'utilise
Zend_Json_Encoder::encode pour encoder mon json

comme tu ne dit pas quel est le problème je ne vois pas comment t'aider
que contient ton tableau qu'attends tu et que reçois tu
sans ça on ne sais pas en quoi ton json n'est pas bon

A+JYT

Hors ligne

 

#3 10-05-2010 10:49:37

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Re: Zend_Json_Server problème de récupération de mon Json

Ouais désolé, c'est pas très clair :p

Alors en fait, j'ai une requête ajax qui doit me permettre de faire de l'auto complétion sur un champs input.

J'appelle donc mon Webservice, (et faudra que je transforme mon json en tableau, mais çà c'est pas dur).
A l'heure actuelle, voila la réponse :

{"WSAppreciation":{"envelope":"JSON-RPC-1.0","transport":"POST","parameters":[{"type":"string","name":"debut","optional":false},{"type":"object"}],"returns":"object"}}

D'ailleurs, dans la réponse, on voit que visiblement je lui passe 2 paramètres car en effet, j'essaye de définir la variable $debut de mon webservice, mais on doit surement pas faire comme çà visiblement :p

Donc à l'heure actuelle, mon webservice ne me renvoie pas du tout le résultat que j'attendrais :
Le résultat que j'attends dans un premier temps étant du json me renvoyant un champs de ma base (c'est juste la première étape puisque après, je ferais un select pour ne récupérer que les valeurs commençant par ma variable $debut).

J'espère avoir été plus clair.
Merci encore de ton aide smile

[edit]
ah et pour le echo, j'ai voulu faire comme ici :
http://framework.zend.com/manual/fr/zen … erver.html

Après je sais pas si je suis exactement dans le meme cas

Dernière modification par Wiinner (10-05-2010 10:50:55)

Hors ligne

 

#4 10-05-2010 11:01:27

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Re: Zend_Json_Server problème de récupération de mon Json

Alors petit avancement, j'ai du mieux :p

Je vous remet les 2 codes (controlleurs et mapper)

Code:

public function wsappreAction()
    {
        // action body
        $this->_helper->layout->disableLayout();    //disable layout
        $this->_helper->viewRenderer->setNoRender();
        
        $q = $_GET['q'];
        
        $server = new Zend_Json_Server ();
        $server->setClass('Application_Model_AppreciationsMapper');
        $server->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
        
        //smd est de type Zend_Json_Server_Smd
        $smd = $server->getServiceMap();
        
        //On va donc récupérer que le service qui nous intéresse
          $myservice = $smd->getService('WSAppreciation');
          //$myservice->addParam($q);
          $return = $myservice->toJson();
        /*$smd->getService('WSAppreciation');*/
        
        $this->getResponse()
                ->setHeader('Content-Type','application/json')
                ->appendBody($myservice);
        //echo $myservice;
        
        return;

        $server->handle();
                
    }

Code:

/**
     * Webservice renvoyant en json les différentes appréciations possibles
     * @param string $debut est le debut de l'appreciation que l'on cherche
     * @return json
     */
    public function WSAppreciation($debut = '') {
        $entries = $this->fetchAll();
        
        $mytab = array();
        foreach($entries as $appre) {
            $mytab[] = $appre->appreciation;
        }
        
        header('Content-type: application/json');
        return Zend_Json_Encoder::encode(array('appreciation'=>$mytab));
    }

Voila a l'heure actuelle ma réponse est :
{"WSAppreciation":{"envelope":"JSON-RPC-1.0","transport":"POST","parameters":[{"type":"string","name":"debut","optional":true,"default":""}],"returns":["object","object"]}}

C'est un mieux car pour le moment, ma base de donnée ne contient que 2 enregistrements, et que visiblement, çà me retourne 2 objects :p

Par conttre, je comprends pas encore pourquoi c'est des objets :p

Dernière modification par Wiinner (10-05-2010 11:25:56)

Hors ligne

 

#5 10-05-2010 13:05:35

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: Zend_Json_Server problème de récupération de mon Json

bon jeté à la louche sans vérif

Code:

$server = new Zend_Json_Server();
$server->setClass('Application_Model_AppreciationsMapper');
if ('GET' == $_SERVER['REQUEST_METHOD']) {
  $server
    ->setTarget('/json-rpc.php')
    ->setEnvelope(Zend_Json_Server_Smd::ENV_JSONRPC_2);
  $smd = $server->getServiceMap();



  // Set Dojo compatibility:
  $smd->setDojoCompatible(true);
  $this->getResponse()
  ->setHeader('Content-Type','application/json')
  ->appendBody($smd);
  return;
}
$server->handle();

Code:

/**
* Webservice renvoyant en json les différentes appréciations possibles
* @param string $debut est le debut de l'appreciation que l'on cherche
* @return json
*/
public function WSAppreciation($debut = '') {
  $entries = $this->fetchAll();

  $mytab = array();
  foreach($entries as $appre) {
    $mytab[] = $appre->appreciation;
  }

  return array('appreciation'=>$mytab);
}

A+JYT

Hors ligne

 

#6 10-05-2010 14:43:29

Wiinner
Membre
Date d'inscription: 31-03-2010
Messages: 26

Re: Zend_Json_Server problème de récupération de mon Json

Tout à bord, merci,

par contre, j'ai du modifié un tout petit peu la partie controlleur que tu m'as donné, car tu récupérais tous les services de la classe, et çà devenait illisible en Json.
Par contre malheureusement, je n'ai toujours pas le résultat escompté

{"WSAppreciation":{"envelope":"JSON-RPC-1.0","transport":"POST","parameters":[{"type":"string","name":"debut","optional":true,"default":""}],"returns":["array","array"]}}

(çà c'est en ne prenant que le service que je veux).

Par contre, j'ai un peu plus de mal à comprendre, car j'ai mis un 3eme enregistrement dans la base de donnée, et pourtant, çà me retourne que 2 array.

J'essaye encore et toujours de chercher de mon coté, même si çà me déprime :p
Encore merci pour votre aide.

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