| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 16503 -->
- <!-- Reviewed: no -->
- <sect3 id="zend.controller.actionhelpers.json">
- <title>JSON</title>
- <para>
- Les réponses <acronym>JSON</acronym> sont les réponses de choix dans une architecture de type <acronym>AJAX</acronym> qui
- attend des données structurées. <acronym>JSON</acronym> peut être immédiatement interprété du coté du client,
- ce qui rend la tâche plus simple et plus rapide.
- </para>
- <para>L'aide d'action <acronym>JSON</acronym> effectue plusieurs traitements :</para>
- <itemizedlist>
- <listitem>
- <para>Désactive les layouts si elles sont activées.</para>
- </listitem>
- <listitem>
- <para>
- Optionnellement, un tableau d'options en second argument de
- <methodname>Zend_Json::encode()</methodname>. Ce tableau d'options permet l'activation des
- layouts et l'encodage en utilisant <classname>Zend_Json_Expr</classname>.
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array('enableJsonExprFinder' => true));
- ]]></programlisting>
- </listitem>
- <listitem>
- <para>Désactive le ViewRenderer s'il est activé.</para>
- </listitem>
- <listitem>
- <para>Envoie à la réponse un en-tête 'Content-Type' à 'application/json'.</para>
- </listitem>
- <listitem>
- <para>
- Par défaut, retourne immédiatement la réponse, sans attendre la fin de
- l'exécution de l'action.
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Son utilisation est toute simple, appelez le depuis le gestionnaire d'aides (Broker),
- ou appelez une de ses méthodes <methodname>encodeJson()</methodname> ou <methodname>sendJson()</methodname> :
- </para>
- <programlisting language="php"><![CDATA[
- class FooController extends Zend_Controller_Action
- {
- public function barAction()
- {
- // Effectue des traitements ici ...
- // Envoie la réponse JSON :
- $this->_helper->json($data);
- // ou...
- $this->_helper->json->sendJson($data);
- // ou retourne la chaine json:
- $json = $this->_helper->json->encodeJson($data);
- }
- }
- ]]></programlisting>
- <note>
- <title>Conserver les Layouts</title>
- <para>
- Si vous avez besoin des layouts, pour par exemple générer vos réponses <acronym>JSON</acronym> dans
- un contexte particulier, chaque méthode de l'aide <acronym>JSON</acronym> accepte un second paramètre
- booléen. A <constant>TRUE</constant>, les layouts resteront activées (par défaut à
- <constant>FALSE</constant>) :
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, true);
- ]]></programlisting>
- <para>
- Optionally, you can pass an array as the second parameter. This
- array may contain a variety of options, including the
- <code>keepLayouts</code> option:
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array('keepLayouts' => true);
- ]]></programlisting>
- </note>
- <note>
- <title>Activer l'encodage en utilisant Zend_Json_Expr</title>
- <para>
- <methodname>Zend_Json::encode()</methodname> permet l'encodage des expressions <acronym>JSON</acronym> natives en
- utilisant des objets <classname>Zend_Json_Expr</classname>. Cette option est désactivée par
- défaut. Pour l'activer, fournissez la valeur booléenne <constant>TRUE</constant> à l'option
- <code>enableJsonExprFinder</code> :
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array('enableJsonExprFinder' => true);
- ]]></programlisting>
- <para>
- Si vous souhaitez faire ceci, vous <emphasis>devez</emphasis> un tableau en tant que
- second argument. Ceci vous permet aussi de combiner avec les autres options, comme
- l'option <code>keepLayouts</code>. Toutes ces options sont alors fournies à
- <methodname>Zend_Json::encode()</methodname>.
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, array(
- 'enableJsonExprFinder' => true,
- 'keepLayouts' => true,
- ));
- ]]></programlisting>
- </note>
- </sect3>
|