<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.config.adapters.json">
    <title>Zend_Config_Json</title>

    <sect2 id="zend.config.adapters.json.intro">
        <title>Aperçu</title>

        <para>
            <ulink url="http://www.json.org/">JSON</ulink> est un acronyme pour "JavaScript Object
            Notation"; compatible avec JavaScript, c'est un format d'échange de données
            inter-langage. <classname>Zend_Config_Json</classname> est une extension de
            <classname>Zend_Config</classname> permettant l'utilisation du format
            <acronym>JSON</acronym>.
        </para>
    </sect2>

    <sect2 id="zend.config.adapters.json.quick-start">
        <title>Démarrage rapide</title>

        <para>
            Voici une version <acronym>JSON</acronym> de la configuration d'une application
            standard.
        </para>

        <programlisting language="json"><![CDATA[
{
    "production":{
        "phpSettings":{
            "display_startup_errors": false,
            "display_errors": false
        },
        "includePaths":{
            "library": "APPLICATION_PATH/../library"
        },
        "bootstrap":{
            "path": "APPLICATION_PATH/Bootstrap.php",
            "class": "Bootstrap"
        },
        "appnamespace": "Application",,
        "resources":{
            "frontController":{
                "controllerDirectory": "APPLICATION_PATH/controllers",
                "moduleDirectory": "APPLICATION_PATH/modules",
                "params":{
                    "displayExceptions": false
                }
            },
            "modules":[],
            "db":{
                "adapter": "pdo_sqlite",
                "params":{
                    "dbname": "APPLICATION_PATH/../data/db/application.db"
                }
            },
            "layout":{
                "layoutPath": "APPLICATION_PATH/layouts/scripts/"
            }
        }
    },
    "staging":{
        "_extends": "production"
    },
    "testing":{
        "_extends": "production",
        "phpSettings":{
            "display_startup_errors": true,
            "display_errors": true
        },
    },
    "development":{
        "_extends": "production",
        "phpSettings":{
            "display_startup_errors": true,
            "display_errors": true
        },
        "resources":{
            "frontController":{
                "params":{
                    "displayExceptions": true
                }
            }
        }
    }
}
]]></programlisting>

        <para>
            Pour l'utiliser, instanciez simplement <classname>Zend_Config_Json</classname> en lui
            indiquant le chemin vers ce fichier ainsi que la section à charger. Par défaut,
            les constantes trouvées dans les valeurs seront substituées par leurs valeurs.
        </para>

        <programlisting language="php"><![CDATA[
$config = new Zend_Config_Json(
    APPLICATION_PATH . '/configs/application.json',
    APPLICATION_ENV
);
]]></programlisting>

        <para>
            Une fois instancié, l'utilisation est classique, comme un objet de configuration.
        </para>

        <programlisting language="php"><![CDATA[
$db = Zend_Db::factory($config->resources->db);
]]></programlisting>

        <warning>
            <title>Utilisez les constantes avec précaution</title>

            <para>
                <acronym>JSON</acronym> possède une structure stricte concernant les types de
                données. Ainsi, vous devez vous assurer que vos constantes sont utilisées
                correctement. Pour les constantes de type chaîne de caractères, encapsulez les
                avec des doubles quotes (""). Pour les constantes d'autres types, vous pouvez
                omettre les quotes, mais soyez alors certains qu'elles ne retournent pas des
                chaînes, sinon vous rencontrerez des erreurs d'analyse. Si vous doutez,
                encapsulez le contenu dans des chaînes à doubles quotes.
            </para>
        </warning>
    </sect2>

    <sect2 id="zend.config.adapters.json.options">
        <title>Options de configuration</title>

        <para>
            Les options suivantes peuvent être passées comme clés au troisième paramètre
            <varname>$options</varname> du constructeur.
        </para>

        <variablelist>
            <title>Zend_Config_Json Options</title>

            <varlistentry>
                <term>allow_modifications/allowModifications</term>

                <listitem>
                    <para>
                        Par défaut, <classname>Zend_Config</classname> est en lecture seule.
                        Passer cette option à <constant>true</constant> autorisera la modification
                        de l'objet.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term>skip_extends/skipExtends</term>

                <listitem>
                    <para>
                        Par défaut, à chaque fois qu'une section étend une autre,
                        <classname>Zend_Config</classname> regroupera cette section avec son
                        parent. Utiliser le booléen <constant>true</constant> pour cette option
                        désactivera ce comportement, la configuration de la section sera
                        telle-quelle.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry>
                <term>ignore_constants</term>

                <listitem>
                    <para>
                        Par défaut, <classname>Zend_Config_Json</classname> remplacera toutes les
                        constantes trouvées dans le fichier par leurs valeurs respectives. Passez
                        le booléen <constant>true</constant> à cette option pour désactiver cette
                        fonctionnalité.
                    </para>

                    <para>
                        Notez qu'ignorer les constantes peut mener à des erreurs d'analyse, en
                        particulier si les constantes sont utilisées pour des entiers, des
                        flottants ou des valeurs booléennes. La manière la plus sûre est
                        d'encapsuler les constantes dans des quotes.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </sect2>

    <sect2 id="zend.config.adapters.json.methods">
        <title>Méthodes disponibles</title>

        <variablelist>
            <varlistentry id="zend.config.adapters.json.methods.constructor">
                <term>
                    <methodsynopsis>
                        <methodname>__construct</methodname>
                        <methodparam>
                            <funcparams>$json, $section = null, $options = false</funcparams>
                        </methodparam>
                    </methodsynopsis>
                </term>

                <listitem>
                    <para>
                        Constructeur. <varname>$json</varname> doit être une chaîne de caractères
                        <acronym>JSON</acronym> valide ou doit pointer vers un fichier
                        <acronym>JSON</acronym> valide. Si <varname>$section</varname> est précisé,
                        seule la section indiquée sera analysée. <varname>$options</varname> est
                        documenté dans <link
                            linkend="zend.config.adapters.json.options">la section options</link>.
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry id="zend.config.adapters.json.methods.set-ignore-constants">
                <term>
                    <methodsynopsis>
                        <methodname>setIgnoreConstants</methodname>
                        <methodparam>
                            <funcparams>$flag</funcparams>
                        </methodparam>
                    </methodsynopsis>
                </term>

                <listitem>
                    <para>
                        Cette méthode <emphasis>statique</emphasis> est utilisée pour changer le
                        comportement global de l'analyse des constantes trouvées dans les fichiers
                        <acronym>JSON</acronym>. Par défaut, les constantes sont remplacées par
                        leurs valeurs. Passer le booléen <constant>true</constant> à cette méthode
                        surchargera ce comportement. (Vous pouvez changer le comportement par
                        instance en utilisant l'option <varname>ignore_constants</varname>.)
                    </para>
                </listitem>
            </varlistentry>

            <varlistentry id="zend.config.adapters.json.methods.ignore-constants">
                <term>
                    <methodsynopsis>
                        <methodname>ignoreConstants</methodname>
                        <methodparam>
                            <funcparams></funcparams>
                        </methodparam>
                    </methodsynopsis>
                </term>

                <listitem>
                    <para>
                        Cette méthode <emphasis>statique</emphasis> retourne la valeur actuelle
                        de <varname>ignore_constants</varname>.
                    </para>
                </listitem>
            </varlistentry>
        </variablelist>
    </sect2>
</sect1>
