# Zend_Config_Json

## Aperçu

JSON est un acronyme pour "JavaScript Object Notation"; compatible avec JavaScript, c'est un format d'échange de données inter-langage. `Zend_Config_Json` est une extension de `Zend_Config` permettant l'utilisation du format JSON.

## Démarrage rapide

Voici une version JSON de la configuration d'une application standard.

    {
        "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
                    }
                }
            }
        }
    }

Pour l'utiliser, instanciez simplement `Zend_Config_Json` 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.

    $config = new Zend_Config_Json(
        APPLICATION_PATH . '/configs/application.json',
        APPLICATION_ENV
    );

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

    $db = Zend_Db::factory($config->resources->db);

### Utilisez les constantes avec précaution

JSON 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.

## Options de configuration

Les options suivantes peuvent être passées comme clés au troisième paramètre `$options` du constructeur.

### Zend_Config_Json Options

allow_modifications/allowModifications

  Par défaut, `Zend_Config` est en lecture seule. Passer cette option à `true` autorisera la modification de l'objet.

skip_extends/skipExtends

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

ignore_constants

  Par défaut, `Zend_Config_Json` remplacera toutes les constantes trouvées dans le fichier par leurs valeurs respectives. Passez le booléen `true` à cette option pour désactiver cette fonctionnalité.

  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.

## Méthodes disponibles

`__construct` $json, $section = null, $options = false

  Constructeur. `$json` doit être une chaîne de caractères JSON valide ou doit pointer vers un fichier JSON valide. Si `$section` est précisé, seule la section indiquée sera analysée. `$options` est documenté dans la section options.

`setIgnoreConstants` $flag

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

`ignoreConstants`

  Cette méthode statique retourne la valeur actuelle de `ignore_constants`.