| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?xml version="1.0" encoding="utf-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- 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' à
- <filename>application/json</filename>.
- </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 séparés pour les réponses
- <acronym>JSON</acronym>, 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 :
- </para>
- <programlisting language="php"><![CDATA[
- $this->_helper->json($data, true);
- ]]></programlisting>
- <para>
- Optionnellement, vous pouvez fournir un tableau en tant que second paramètre.
- Ce tableau peut conftenir une variété d'options, incluant l'option
- <emphasis>keepLayouts</emphasis> :
- </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
- <emphasis>enableJsonExprFinder</emphasis> :
- </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 <emphasis>keepLayouts</emphasis>. 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>
|