# Zend_Config_Writer

`Zend_Config_Writer` vous donne la possibilité d'écrire des fichiers de configuration à partir d'objets `Zend_Config`. Il fonctionne avec des adaptateurs détachés du système et est donc très simple à utiliser. Par défaut `Zend_Config_Writer` embarque trois adaptateurs, qui fonctionnent tous de la même façon. Vous instanciez un rédacteur ("writer") avec des options spécifiques, qui peuvent être filename et config. Ensuite vous pouvez appeler la méthode `write()` du rédacteur et le fichier de configuration est créé. Vous pouvez aussi fournir `$filename` et `$config` directement à la méthode `write()`. Actuellement les rédacteurs suivants sont embarqués avec `Zend_Config_Writer` :

- `Zend_Config_Writer_Array`

- `Zend_Config_Writer_Ini`

- `Zend_Config_Writer_Xml`

Une exception subsiste, `Zend_Config_Writer_Ini` qui a un paramètre optionnel additionnel nestSeparator, définissant le caractère séparant les profondeurs d'imbrication. Par défaut il s'agit du point, comme `Zend_Config_Ini` l'accepte par défaut.

Lors de la modification ou la création d'objet `Zend_Config`, il y a quelques informations à garder en mémoire. Pour créer ou modifier une valeur, vous appelez simplement le réglage d'un paramètre d'un objet `Zend_Config` grâce à l'accesseur de paramètre ("->"). Pour créer une section à la racine ou pour créer une branche, vous avez juste à créer un nouveau tableau (`$config->branch = array();`). Pour définir quelle section en étend une autre, vous devez appeler la méthode `setExtend()` sur l'objet `Zend_Config` racine.

## Utilisation de Zend_Config_Writer

Cet exemple illustre une utilisation basique `Zend_Config_Writer_Xml` pour créer un nouveau fichier de configuration :

    // Créer l'objet de configuration
    $config = new Zend_Config(array(), true);
    $config->production = array();
    $config->staging    = array();

    $config->setExtend('staging', 'production');

    $config->production->db = array();
    $config->production->db->hostname = 'localhost';
    $config->production->db->username = 'production';

    $config->staging->db = array();
    $config->staging->db->username = 'staging';

    // Ecrire le fichier de l'une des manières suivantes :
    // a)
    $writer = new Zend_Config_Writer_Xml(array('config'   => $config,
                                               'filename' => 'config.xml'));
    $writer->write();

    // b)
    $writer = new Zend_Config_Writer_Xml();
    $writer->setConfig($config)
           ->setFilename('config.xml')
           ->write();

    // c)
    $writer = new Zend_Config_Writer_Xml();
    $writer->write('config.xml', $config);

Ceci créera un fichier de configuration XML avec les sections "production" et "staging", où "staging" étend "production".

## Modifier une configuration existante

Cet exemple montre comment modifier un fichier de configuration existant :

    // Charger toutes les sections d'un fichier de configuration existant,
    // tout en évitant les sections étendues.
    $config = new Zend_Config_Ini('config.ini',
                                  null,
                                  array('skipExtends'        => true,
                                        'allowModifications' => true));

    // Modifier une valeur
    $config->production->hostname = 'foobar';

    // Ecrire le fichier
    $writer = new Zend_Config_Writer_Ini(array('config'   => $config,
                                               'filename' => 'config.ini'));
    $writer->write();

## Chargement d'un fichier de configuration

Lors du chargement d'un fichier de configuration existant afin de le modifier, il est très important de charger toutes les sections et d'éviter les sections étendues, évitant ainsi toute fusion de valeurs. Ceci est réalisé en fournissant l'option skipExtends au constructeur.