# Zend_Config_Writer

`Zend_Config_Writer` позволяет создавать конфигурационные файлы из объектов `Zend_Config`. Он работает и без использования адаптеров и, таким образом, очень прост в использовании. По умолчанию `Zend_Config_Writer` поставляется с тремя адаптерами, которые используются одинаково. Вы инстанцируете класс для записи с опциями, которыми могут быть filename (имя файла) и config (конфигурационные данные). Затем вы вызываете метод `write()` объекта, и он создает конфигурационный файл. Вы можете также передавать `$filename` и `$config` непосредственно методу `write()`. В настоящее время вместе с `Zend_Config_Writer` поставляются следующие адаптеры:

- `Zend_Config_Writer_Array`

- `Zend_Config_Writer_Ini`

- `Zend_Config_Writer_Xml`

В качестве исключения `Zend_Config_Writer_Ini` имеет еще один опциональный параметр nestSeparator, через который указывается символ-разделитель для узлов. По умолчанию это точка, как и в `Zend_Config_Ini`.

При изменении или создании объекта `Zend_Config` следует знать следующее. Для того, чтобы создать или изменить значение, устанавливайте параметр объекта `Zend_Config` через аксессор (->). Для того, чтобы создать раздел в корне или ветку, создавайте новый массив ("`$config->branch = array()`"). Для того, чтобы указать, от какого раздела наследует другой, вызывайте метод `setExtend()` в корне объекта `Zend_Config`.

## Использование Zend_Config_Writer

Этот пример демонстрирует использование `Zend_Config_Writer_Xml` для создания нового конфигурационного файла:

    // Создание объекта конфигурации
    $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';

    // Вы можете записать конфигурационный файл одним из следующих способов:
    // а)
    $writer = new Zend_Config_Writer_Xml(array('config'   => $config,
                                               'filename' => 'config.xml'));
    $writer->write();

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

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

В этом примере создается конфигурационный XML-файл с "промежуточным" (staging) и "производственным" (production) разделами, в котором первый раздел наследует от второго.

## Изменение существующего конфигурационного файла

Этот пример демонстрирует редактирование существующего конфигурационного файла.

    // Загрузка всех разделов из существующего конфигурационного файла с
    // пропуском "расширений"
    $config = new Zend_Config_Ini('config.ini',
                                  null,
                                  array('skipExtends'        => true,
                                        'allowModifications' => true));

    // Изменение значения
    $config->production->hostname = 'foobar';

    // Сохранение
    $writer = new Zend_Config_Writer_Ini(array('config'   => $config,
                                               'filename' => 'config.ini'));
    $writer->write();

## Загрузка конфигурационного файла

При загрузке существующего файла для последующих изменений важно загрузить все разделы с пропуском расширений с тем, чтобы значения не объединялись. Это достигается путем передачи опции skipExtends конструктору.