Zend_Config_Writer.xml 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20765 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.writer.introduction">
  5. <title>Zend_Config_Writer</title>
  6. <para>
  7. <classname>Zend_Config_Writer</classname>
  8. gibt einem die Möglichkeit Configdateien aus
  9. <classname>Zend_Config</classname>
  10. Objekten heraus zu schreiben. Es arbeitet mit einem
  11. Adapter-artigen System und ist deswegen sehr einfach zu verwenden. Standardmäßig wird
  12. <classname>Zend_Config_Writer</classname>
  13. mit drei Adaptern ausgeliefert, die alle Datei
  14. basierend sind. Der Writer wird mit speziellen Optionen instanziert, welche
  15. <emphasis>filename</emphasis>
  16. und
  17. <emphasis>config</emphasis>
  18. sein können. Dann wird die
  19. <methodname>write()</methodname>
  20. Methode des Writers aufgerufen und die Configdatei wird
  21. erstellt. Man kann
  22. <varname>$filename</varname>
  23. und
  24. <varname>$config</varname>
  25. auch direkt
  26. an die
  27. <methodname>write()</methodname>
  28. Methode übergeben. Aktuell werden die folgenden
  29. Writer mit
  30. <classname>Zend_Config_Writer</classname>
  31. ausgeliefert:
  32. </para>
  33. <itemizedlist>
  34. <listitem>
  35. <para>
  36. <classname>Zend_Config_Writer_Array</classname>
  37. </para>
  38. </listitem>
  39. <listitem>
  40. <para>
  41. <classname>Zend_Config_Writer_Ini</classname>
  42. </para>
  43. </listitem>
  44. <listitem>
  45. <para>
  46. <classname>Zend_Config_Writer_Xml</classname>
  47. </para>
  48. </listitem>
  49. </itemizedlist>
  50. <para>
  51. Der
  52. <acronym>INI</acronym>
  53. Writer hat zwei Modi für die Darstellung bezüglich Sektionen.
  54. Standardmäßig wird die Top-Level Konfiguration immer in Sektionsnamen
  55. geschrieben. Durch den
  56. Aufruf von
  57. <command>$writer->setRenderWithoutSections();</command>
  58. werden alle Optionen in
  59. den globalen Namespace der
  60. <acronym>INI</acronym>
  61. Datei geschrieben und es werden keine
  62. Sektionen angehängt.
  63. </para>
  64. <para>
  65. Zusätzlich hat
  66. <classname>Zend_Config_Writer_Ini</classname>
  67. einen zusätzlichen optionalen
  68. Parameter
  69. <emphasis>nestSeparator</emphasis>
  70. , welche definiert mit welchem Zeichen die
  71. einzelnen Nodes getrennt werden. Der Standard ist ein einzelner Punkt, wie er
  72. standardmäßig
  73. von
  74. <classname>Zend_Config_Ini</classname>
  75. akzeptiert wird.
  76. </para>
  77. <para>
  78. Wenn ein
  79. <classname>Zend_Config</classname>
  80. Objekt geändert oder erstellt wird, muß man
  81. einige Dinge wissen. Um einen Wert zu erstellen oder zu ändern muß einfach
  82. der Parameter
  83. des
  84. <classname>Zend_Config</classname>
  85. Objektes über den Zugriffsaccessor
  86. (
  87. <emphasis>-&gt;</emphasis>
  88. ) gesetzt werden. Um eine Sektion im Root oder im Branch zu
  89. erstellen muß einfach ein neues Aray erstellt werden
  90. ("
  91. <command>$config-&gt;branch = array();</command>
  92. "). Um zu definieren welche Sektion eine
  93. andere erweitert, muß die
  94. <methodname>setExtend()</methodname>
  95. Methode am Root
  96. <classname>Zend_Config</classname>
  97. Objekt aufgerufen werden.
  98. </para>
  99. <example id="zend.config.writer.example.using">
  100. <title>Verwenden von Zend_Config_Writer</title>
  101. <para>
  102. Dieses Beispiel zeigt die grundsätzliche Verwendung von
  103. <classname>Zend_Config_Writer_Xml</classname>
  104. um eine neue Konfigurationsdatei zu
  105. erstellen:
  106. </para>
  107. <programlisting language="php"><![CDATA[
  108. // Ein neues Config Objekt erstellen
  109. $config = new Zend_Config(array(), true);
  110. $config->production = array();
  111. $config->staging = array();
  112. $config->setExtend('staging', 'production');
  113. $config->production->db = array();
  114. $config->production->db->hostname = 'localhost';
  115. $config->production->db->username = 'production';
  116. $config->staging->db = array();
  117. $config->staging->db->username = 'staging';
  118. // Die Config Datei auf einem der folgenden Wege schreiben:
  119. // a)
  120. $writer = new Zend_Config_Writer_Xml(array('config' => $config,
  121. 'filename' => 'config.xml'));
  122. $writer->write();
  123. // b)
  124. $writer = new Zend_Config_Writer_Xml();
  125. $writer->setConfig($config)
  126. ->setFilename('config.xml')
  127. ->write();
  128. // c)
  129. $writer = new Zend_Config_Writer_Xml();
  130. $writer->write('config.xml', $config);
  131. ]]></programlisting>
  132. <para>
  133. Das erstellt eine
  134. <acronym>XML</acronym>
  135. Config Datei mit den Sektionen production und
  136. staging, wobei staging production erweitert.
  137. </para>
  138. </example>
  139. <example id="zend.config.writer.modifying">
  140. <title>Eine bestehende Config ändern</title>
  141. <para>
  142. Dieses Beispiel zeigt wie eine bestehende Config Datei bearbeitet werden
  143. kann.
  144. </para>
  145. <programlisting language="php"><![CDATA[
  146. // Lädt alle Sektionen einer bestehenden Config Datei, und überspringt
  147. // alle Erweiterungen
  148. $config = new Zend_Config_Ini('config.ini',
  149. null,
  150. array('skipExtends' => true,
  151. 'allowModifications' => true));
  152. // Ändere einen Wert
  153. $config->production->hostname = 'foobar';
  154. // Schreibe die Config Datei
  155. $writer = new Zend_Config_Writer_Ini(array('config' => $config,
  156. 'filename' => 'config.ini'));
  157. $writer->write();
  158. ]]></programlisting>
  159. </example>
  160. <note>
  161. <title>Laden einer Config Datei</title>
  162. <para>
  163. Beim Laden einer bestehenden Config Datei für eine Änderung ist es
  164. sehr wichtig das alle
  165. Sektionen geladen werden und die Erweiterungen übersprungen werden, sodas
  166. keine Werte
  167. zusammengefügt werden. Das wird durch die Übergabe von
  168. <emphasis>skipExtends</emphasis>
  169. als Option an den Constructor durchgeführt.
  170. </para>
  171. </note>
  172. <para>
  173. Für alle Datei-basierenden Writer (
  174. <acronym>INI</acronym>
  175. ,
  176. <acronym>XML</acronym>
  177. und
  178. <acronym>PHP</acronym>
  179. Array) wird intern
  180. <methodname>render()</methodname>
  181. verwendet um den
  182. Konfigurationsstring zu erstellen. Diese Methode kann auch von ausserhalb aus verwendet
  183. werden wenn man Zugriff auf eine String-Repräsentation der
  184. Konfigurationsdaten benötigt.
  185. </para>
  186. </sect1>