Zend_Config_Writer.xml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  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. записи с опциями, которыми могут быть <code>filename</code>
  13. (имя файла) и <code>config</code> (конфигурационные данные).
  14. Затем вы вызываете метод <code>write()</code> объекта, и он
  15. создает конфигурационный файл. Вы можете также передавать
  16. <varname>$filename</varname> и <varname>$config</varname> непосредственно
  17. методу <code>write()</code>. В настоящее время вместе с
  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. еще один опциональный параметр <code>nestSeparator</code>, через
  40. который указывается символ-разделитель для узлов.
  41. По умолчанию это точка, как и в <classname>Zend_Config_Ini</classname>.
  42. </para>
  43. <para>
  44. При изменении или создании объекта <classname>Zend_Config</classname>
  45. следует знать следующее.
  46. Для того, чтобы создать или изменить значение, устанавливайте
  47. параметр объекта <classname>Zend_Config</classname> через аксессор
  48. <code>-&gt;</code>. Для того, чтобы создать раздел в корне или
  49. ветку, создавайте новый массив
  50. (<varname>$config-&gt;branch = array();</varname>). Для того, чтобы
  51. указать, от какого раздела наследует другой, вызывайте метод в корне
  52. объекта <classname>Zend_Config</classname>.
  53. </para>
  54. <example id="zend.config.writer.example.using">
  55. <title>Использование Zend_Config_Writer</title>
  56. <para>
  57. Этот пример демонстрирует использование
  58. <code>Zend_Config_Writer_Xml</code> для создания нового
  59. конфигурационного файла:
  60. </para>
  61. <programlisting language="php"><![CDATA[
  62. // Создание объекта конфигурации
  63. $config = new Zend_Config(array(), true);
  64. $config->production = array();
  65. $config->staging = array();
  66. $config->setExtend('staging', 'production');
  67. $config->production->db = array();
  68. $config->production->db->hostname = 'localhost';
  69. $config->production->db->username = 'production';
  70. $config->staging->db = array();
  71. $config->staging->db->username = 'staging';
  72. // Вы можете записать конфигурационный файл одним из следующих способов:
  73. // а)
  74. $writer = new Zend_Config_Writer_Xml(array('config' => $config,
  75. 'filename' => 'config.xml'));
  76. $writer->write();
  77. // б)
  78. $writer = new Zend_Config_Writer_Xml();
  79. $writer->setConfig($config)
  80. ->setFilename('config.xml')
  81. ->write();
  82. // в)
  83. $writer = new Zend_Config_Writer_Xml();
  84. $writer->write('config.xml', $config);
  85. ]]></programlisting>
  86. <para>
  87. В этом примере создается конфигурационный
  88. XML-файл с "промежуточным" (staging) и "производственным"
  89. (production) разделами, в котором первый раздел наследует от
  90. второго.
  91. </para>
  92. </example>
  93. <example id="zend.config.writer.modifying">
  94. <title>Изменение существующего конфигурационного файла</title>
  95. <para>
  96. Этот пример демонстрирует редактирование существующего
  97. конфигурационного файла.
  98. </para>
  99. <programlisting language="php"><![CDATA[
  100. // Загрузка всех разделов из существующего конфигурационного файла с
  101. // пропуском "расширений"
  102. $config = new Zend_Config_Ini('config.ini',
  103. null,
  104. array('skipExtends' => true,
  105. 'allowModifications' => true));
  106. // Изменение значения
  107. $config->production->hostname = 'foobar';
  108. // Сохранение
  109. $writer = new Zend_Config_Writer_Ini(array('config' => $config,
  110. 'filename' => 'config.ini'));
  111. $writer->write();
  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. -->