Zend_Config_Writer.xml 6.4 KB

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