Zend_Config_Writer.xml 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <sect1 id="zend.config.writer.introduction">
  4. <title>Zend_Config_Writer</title>
  5. <para>
  6. <classname>Zend_Config_Writer</classname> позволяет создавать конфигурационные
  7. файлы из объектов <classname>Zend_Config</classname>.
  8. Он работает и без использования адаптеров и, таким образом, очень прост
  9. в использовании.
  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> поставляются следующие адаптеры:
  19. </para>
  20. <itemizedlist>
  21. <listitem>
  22. <para>
  23. <classname>Zend_Config_Writer_Array</classname>
  24. </para>
  25. </listitem>
  26. <listitem>
  27. <para>
  28. <classname>Zend_Config_Writer_Ini</classname>
  29. </para>
  30. </listitem>
  31. <listitem>
  32. <para>
  33. <classname>Zend_Config_Writer_Xml</classname>
  34. </para>
  35. </listitem>
  36. </itemizedlist>
  37. <para>
  38. В качестве исключения <classname>Zend_Config_Writer_Ini</classname> имеет
  39. еще один опциональный параметр <emphasis>nestSeparator</emphasis>, через
  40. который указывается символ-разделитель для узлов.
  41. По умолчанию это точка, как и в <classname>Zend_Config_Ini</classname>.
  42. </para>
  43. <para>
  44. При изменении или создании объекта <classname>Zend_Config</classname>
  45. следует знать следующее.
  46. Для того, чтобы создать или изменить значение, устанавливайте
  47. параметр объекта <classname>Zend_Config</classname> через аксессор
  48. (<emphasis>-&gt;</emphasis>). Для того, чтобы создать раздел в корне или
  49. ветку, создавайте новый массив
  50. ("<command>$config-&gt;branch = array()</command>"). Для того, чтобы
  51. указать, от какого раздела наследует другой, вызывайте метод
  52. <methodname>setExtend()</methodname> в корне объекта
  53. <classname>Zend_Config</classname>.
  54. </para>
  55. <example id="zend.config.writer.example.using">
  56. <title>Использование Zend_Config_Writer</title>
  57. <para>
  58. Этот пример демонстрирует использование
  59. <classname>Zend_Config_Writer_Xml</classname> для создания нового
  60. конфигурационного файла:
  61. </para>
  62. <programlisting language="php"><![CDATA[
  63. // Создание объекта конфигурации
  64. $config = new Zend_Config(array(), true);
  65. $config->production = array();
  66. $config->staging = array();
  67. $config->setExtend('staging', 'production');
  68. $config->production->db = array();
  69. $config->production->db->hostname = 'localhost';
  70. $config->production->db->username = 'production';
  71. $config->staging->db = array();
  72. $config->staging->db->username = 'staging';
  73. // Вы можете записать конфигурационный файл одним из следующих способов:
  74. // а)
  75. $writer = new Zend_Config_Writer_Xml(array('config' => $config,
  76. 'filename' => 'config.xml'));
  77. $writer->write();
  78. // б)
  79. $writer = new Zend_Config_Writer_Xml();
  80. $writer->setConfig($config)
  81. ->setFilename('config.xml')
  82. ->write();
  83. // в)
  84. $writer = new Zend_Config_Writer_Xml();
  85. $writer->write('config.xml', $config);
  86. ]]></programlisting>
  87. <para>
  88. В этом примере создается конфигурационный
  89. <acronym>XML</acronym>-файл с "промежуточным" (staging) и
  90. "производственным" (production) разделами, в котором первый
  91. раздел наследует от второго.
  92. </para>
  93. </example>
  94. <example id="zend.config.writer.modifying">
  95. <title>Изменение существующего конфигурационного файла</title>
  96. <para>
  97. Этот пример демонстрирует редактирование существующего
  98. конфигурационного файла.
  99. </para>
  100. <programlisting language="php"><![CDATA[
  101. // Загрузка всех разделов из существующего конфигурационного файла с
  102. // пропуском "расширений"
  103. $config = new Zend_Config_Ini('config.ini',
  104. null,
  105. array('skipExtends' => true,
  106. 'allowModifications' => true));
  107. // Изменение значения
  108. $config->production->hostname = 'foobar';
  109. // Сохранение
  110. $writer = new Zend_Config_Writer_Ini(array('config' => $config,
  111. 'filename' => 'config.ini'));
  112. $writer->write();
  113. ]]></programlisting>
  114. </example>
  115. <note>
  116. <title>Загрузка конфигурационного файла</title>
  117. <para>
  118. При загрузке существующего файла для последующих изменений
  119. важно загрузить все
  120. разделы с пропуском расширений с тем, чтобы значения не
  121. объединялись. Это достигается путем передачи опции
  122. <emphasis>skipExtends</emphasis> конструктору.
  123. </para>
  124. </note>
  125. </sect1>
  126. <!--
  127. vim:se ts=4 sw=4 et:
  128. -->