<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 15142 -->
<!-- Reviewed: no -->
<sect3 id="zend.controller.actionhelpers.json">
    <title>JSON</title>

    <para>
        Les réponses JSON sont les réponses de choix dans une architecture de type AJAX qui
        attend des données structurées. JSON 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 JSON effectue plusieurs traitements&#160;:</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
                <code>Zend_Json::encode()</code>. Ce tableau d'options permet l'activation des
                layouts et l'encodage en utilisant <code>Zend_Json_Expr</code>.
            </para>
            <programlisting role="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 <code>encodeJson()</code> ou <code>sendJson()</code>&#160;:
    </para>

    <programlisting role="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 JSON dans
            un contexte particulier, chaque méthode de l'aide JSON accepte un second paramètre
            booléen. A <code>true</code>, les layouts resteront activées (par défaut à
            <code>false</code>)&#160;:
        </para>
        <programlisting role="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 role="php"><![CDATA[
$this->_helper->json($data, array('keepLayouts' => true);
]]></programlisting>
    </note>

    <note>
        <title>Activer l'encodage en utilisant Zend_Json_Expr</title>
        <para>
            <code>Zend_Json::encode()</code> permet l'encodage des expressions JSON natives en
            utilisant des objets <code>Zend_Json_Expr</code>. Cette option est désactivée par
            défaut. Pour l'activer, fournissez la valeur booléenne <code>true</code> à l'option
            <code>enableJsonExprFinder</code>&#160;:
        </para>
        <programlisting role="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 à
            <code>Zend_Json::encode()</code>.
        </para>

        <programlisting role="php"><![CDATA[
$this->_helper->json($data, array(
    'enableJsonExprFinder' => true,
    'keepLayouts'          => true,
));
]]></programlisting>
    </note>
</sect3>
