Zend_Config_Writer.xml 6.5 KB

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