Comment faire pour que Zend Framework ne rend pas une vue / une présentation lors de l’envoi d’une réponse AJAX?

La documentation de Zend n’est pas très claire à ce sujet.

Le problème est que, par défaut, Zend affiche automatiquement une vue à la fin de chaque action du contrôleur. Si vous utilisez une mise en page – et pourquoi pas vous? – ça rend aussi ça. Cela convient aux pages Web normales, mais lorsque vous envoyez une réponse AJAX, vous ne voulez pas tout. Comment empêcher le rendu automatique de Zend sur une base action par action?

Appelez ce code depuis n’importe quelle action pour envoyer des réponses AJAX:

$this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(TRUE); 

Cela désactive le moteur de mise en page pour cette action et désactive le rendu automatique de la vue pour cette action. Vous pouvez ensuite simplement “faire écho” à tout ce que vous voulez que votre sortie AJAX soit, sans vous soucier des choses normales de vue / mise en page envoyées pour le tour.

Si votre AJAX renvoie JSON, vous pouvez utiliser l’assistant d’action JSON:

 $this->_helper->json($data); 

Cette aide json_encode vos données $, les json_encode avec des en-têtes JSON et meurt enfin, nous obtenons donc un JSON propre renvoyé par l’action sans présentation et rendu des vues.

fe j’utilise cette construction en action en commençant à éviter plusieurs contrôles ACL pour différentes actions juste-pour-ajax

 public function photosAction() { if ($this->getRequest()->getQuery('ajax') == 1 || $this->getRequest()->isXmlHttpRequest()) { $params = $this->getRequest()->getParams(); $result = false; switch ($params['act']) { case 'deleteImage': //deleting something ... $result = true; //ok break; default : $result = array('error' => 'Invalid action: ' . $params['act']); break; } $this->_helper->json($result); } // regular action code here ... } 

Ou vous pourriez simplement mettre la fonction die () à la fin de l’action

 public function someAction() { echo json_encode($data); die(); }