1 <?xml version="1.0" encoding="UTF-8"?>
3 <sect1 id="zend.config.writer.introduction">
4 <title>Zend_Config_Writer</title>
6 <classname>Zend_Config_Writer</classname> позволяет создавать конфигурационные
7 файлы из объектов <classname>Zend_Config</classname>.
8 Он работает и без использования адаптеров и, таким образом, очень прост
10 По умолчанию <classname>Zend_Config_Writer</classname> поставляется с тремя
11 адаптерами, которые используются одинаково. Вы инстанцируете класс для
12 записи с опциями, которыми могут быть <emphasis>filename</emphasis>
13 (имя файла) и <emphasis>config</emphasis> (конфигурационные данные).
14 Затем вы вызываете метод <methodname>write()</methodname> объекта, и он
15 создает конфигурационный файл. Вы можете также передавать
16 <varname>$filename</varname> и <varname>$config</varname> непосредственно
17 методу <methodname>write()</methodname>. В настоящее время вместе с
18 <classname>Zend_Config_Writer</classname> поставляются следующие адаптеры:
24 <classname>Zend_Config_Writer_Array</classname>
29 <classname>Zend_Config_Writer_Ini</classname>
34 <classname>Zend_Config_Writer_Xml</classname>
40 В качестве исключения <classname>Zend_Config_Writer_Ini</classname> имеет
41 еще один опциональный параметр <emphasis>nestSeparator</emphasis>, через
42 который указывается символ-разделитель для узлов.
43 По умолчанию это точка, как и в <classname>Zend_Config_Ini</classname>.
47 При изменении или создании объекта <classname>Zend_Config</classname>
48 следует знать следующее.
49 Для того, чтобы создать или изменить значение, устанавливайте
50 параметр объекта <classname>Zend_Config</classname> через аксессор
51 (<emphasis>-></emphasis>). Для того, чтобы создать раздел в корне или
52 ветку, создавайте новый массив
53 ("<command>$config->branch = array()</command>"). Для того, чтобы
54 указать, от какого раздела наследует другой, вызывайте метод
55 <methodname>setExtend()</methodname> в корне объекта
56 <classname>Zend_Config</classname>.
59 <example id="zend.config.writer.example.using">
60 <title>Использование Zend_Config_Writer</title>
62 Этот пример демонстрирует использование
63 <classname>Zend_Config_Writer_Xml</classname> для создания нового
64 конфигурационного файла:
66 <programlisting language="php"><![CDATA[
67 // Создание объекта конфигурации
68 $config = new Zend_Config(array(), true);
69 $config->production = array();
70 $config->staging = array();
72 $config->setExtend('staging', 'production');
74 $config->production->db = array();
75 $config->production->db->hostname = 'localhost';
76 $config->production->db->username = 'production';
78 $config->staging->db = array();
79 $config->staging->db->username = 'staging';
81 // Вы можете записать конфигурационный файл одним из следующих способов:
83 $writer = new Zend_Config_Writer_Xml(array('config' => $config,
84 'filename' => 'config.xml'));
88 $writer = new Zend_Config_Writer_Xml();
89 $writer->setConfig($config)
90 ->setFilename('config.xml')
94 $writer = new Zend_Config_Writer_Xml();
95 $writer->write('config.xml', $config);
98 В этом примере создается конфигурационный
99 <acronym>XML</acronym>-файл с "промежуточным" (staging) и
100 "производственным" (production) разделами, в котором первый
101 раздел наследует от второго.
105 <example id="zend.config.writer.modifying">
106 <title>Изменение существующего конфигурационного файла</title>
108 Этот пример демонстрирует редактирование существующего
109 конфигурационного файла.
111 <programlisting language="php"><![CDATA[
112 // Загрузка всех разделов из существующего конфигурационного файла с
113 // пропуском "расширений"
114 $config = new Zend_Config_Ini('config.ini',
116 array('skipExtends' => true,
117 'allowModifications' => true));
119 // Изменение значения
120 $config->production->hostname = 'foobar';
123 $writer = new Zend_Config_Writer_Ini(array('config' => $config,
124 'filename' => 'config.ini'));
130 <title>Загрузка конфигурационного файла</title>
132 При загрузке существующего файла для последующих изменений
134 разделы с пропуском расширений с тем, чтобы значения не
135 объединялись. Это достигается путем передачи опции
136 <emphasis>skipExtends</emphasis> конструктору.