2011-03-08 2 views
9

Normalement, j'ajoute un objet json codé au corps de la réponse, mais j'ai maintenant une situation qui justifie l'utilisation de l'aide d'action ContextSwitch.Création d'un objet de réponse JSON personnalisé avec Zend Action Helper ContextSwitch

J'ai un Zend_Form qui nécessite trois contextes de réponse différents:

  1. html - Render la forme comme html normale dans une mise en page.
  2. html-partial - Une requête ajax "get" qui rend juste la forme en html.
  3. json - Une requête ajax "post" qui renvoie tous les messages d'erreur de validation de formulaire.

Pour chaque contexte, j'ai 3 scripts de vue. Bien que les deux contextes html puissent utiliser le même script de vue, mais je n'ai pas compris si c'est possible.

  • form.phtml
  • form.html.phtml
  • form.json.phtml

Les vues du contexte html fonctionnent bien, mais la vue JSON est pas cueillies en haut Quelle est la meilleure méthode pour remplacer le comportement par défaut de rappel json post ou transmettre un objet codé personnalisé au corps de la réponse?

+0

J'ai découvert que la mise en setAutoJsonSerialization (false) sur le contextSwitch permet un script de vue à rendre, tout en conservant le contenu type de contexte entête. – gawpertron

Répondre

6

Personnellement, je n'utilise pas "View" pour générer du contenu JSON. Dans mon init(), j'ai quelque chose comme ceci:

$ajaxContext = $this->_helper->getHelper('AjaxContext'); 
$ajaxContext->setAutoJsonSerialization(false) 
    ->addActionContext('index', array('html', 'json')) 
    ->initContext(); 

Et Dans mon indexAction():

if (true === $this->isAjaxJson()) { 
    $this->_helper->json(
     array(
      'response' => $myResponse, 
      'message' => $myMesage 
     ) 
    ); 
    return; 
} 

Hope this aide.

+0

Oui c'est plus ou moins comment je l'ai fait. Cependant, j'ai utilisé un script de vue séparé pour gérer la réponse. – gawpertron

0

cela peut aider: $this->_helper->json->sendJson($data); tout,

$data=array('data1'=>'val1','data2'=>'val2');

Questions connexes