J'utilise Zend Framework 1.x pour mon projet. Je veux créer un service Web renvoyer uniquement une chaîne JSON pour la fonction appelant. J'ai essayé d'utiliser Zend_Controller_Action
et appliqué ces méthodes:
1.
$this->getResponse()
->setHeader('Content-type', 'text/plain')
->setBody(json_encode($arrResult));
2.
$this->_helper->getHelper('contextSwitch')
->addActionContext('nctpaymenthandler', 'json')
->initContext();
3.
header('Content-type: application/json');
4.
$this->_response->setHeader('Content-type', 'application/json');
5.
echo Zend_Json::encode($arrResult);
exit;
6.
return json_encode($arrResult);
7.
$this->view->_response = $arrResult;
Mais lorsque j'ai utilisé cURL pour obtenir le résultat, il est revenu avec une chaîne JSON entourée de quelques balises HTML. J'ai ensuite essayé d'utiliser Zend_Rest_Controller
avec les options ci-dessus. Cela n'a toujours pas réussi.
P.S .: La plupart de ces moyens proviennent de la question qui avait été posée sur Stack Overflow.
J'aime cette façon!
//encode your data into JSON and send the response
$this->_helper->json($myArrayofData);
//nothing else will get executed after the line above
Vous devez désactiver la mise en page et afficher le rendu.
Désactiver explicitement la présentation et le rendu de la vue:
public function getJsonResponseAction()
{
$this->getHelper('Layout')
->disableLayout();
$this->getHelper('ViewRenderer')
->setNoRender();
$this->getResponse()
->setHeader('Content-Type', 'application/json');
// should the content type should be UTF-8?
// $this->getResponse()
// ->setHeader('Content-Type', 'application/json; charset=UTF-8');
// ECHO JSON HERE
return;
}
Si vous utilisez l'aide à l'action du contrôleur json, vous devez ajouter un contexte json à l'action. Dans ce cas, l'aide json désactivera la mise en page et le rendu de la vue pour vous.
public function init()
{
$this->_helper->contextSwitch()
->addActionContext('getJsonResponse', array('json'))
->initContext();
}
public function getJsonResponseAction()
{
$jsonData = ''; // your json response
return $this->_helper->json->sendJson($jsonData);
}
Votre code devrait également désactiver la mise en page afin d'empêcher le contenu d'être encapsulé avec le modèle de page standard. Mais une approche beaucoup plus simple serait simplement:
$this->getHelper('json')->sendJson($arrResult);
l'assistant JSON codera votre variable en JSON, définira les en-têtes appropriés et désactivera le script de présentation et d'affichage pour vous.
C'est beaucoup plus simple.
public function init()
{
parent::init();
$this->_helper->contextSwitch()
->addActionContext('foo', 'json')
->initContext('json');
}
public function fooAction()
{
$this->view->foo = 'bar';
}