Zend_Config_Writer.xml 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15207 -->
  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 <classname>Zend_Config</classname>
  8. Objekten heraus zu schreiben. Es arbeitet mit einem Adapter-artigen System und ist deswegen sehr
  9. einfach zu verwenden. Standardmäßig wird <classname>Zend_Config_Writer</classname> mit drei Adaptern
  10. ausgeliefert, die alle gleich funktionieren. Der Writer wird mit speziellen Optionen instanziert,
  11. welche <code>filename</code> und <code>config</code> sein können. Dann wird die <code>write()</code>
  12. Methode des Writers aufgerufen und die Configdatei wird erstellt. Man kann <code>$filename</code>
  13. und <code>$config</code> auch direkt an die <code>write()</code> Methode übergeben. Aktuell werden
  14. die folgenden Writer mit <classname>Zend_Config_Writer</classname> ausgeliefert:
  15. </para>
  16. <itemizedlist>
  17. <listitem>
  18. <para>
  19. <classname>Zend_Config_Writer_Array</classname>
  20. </para>
  21. </listitem>
  22. <listitem>
  23. <para>
  24. <classname>Zend_Config_Writer_Ini</classname>
  25. </para>
  26. </listitem>
  27. <listitem>
  28. <para>
  29. <classname>Zend_Config_Writer_Xml</classname>
  30. </para>
  31. </listitem>
  32. </itemizedlist>
  33. <para>
  34. Als Ausnahme hat <classname>Zend_Config_Writer_Ini</classname> einen zusätzlichen optionalen Parameter
  35. <code>nestSeparator</code>, welche definiert mit welchem Zeichen die einzelnen Nodes getrennt werden.
  36. Der Standard ist ein einzelner Punkt, wie er standardmäßig von <classname>Zend_Config_Ini</classname>
  37. akzeptiert wird.
  38. </para>
  39. <para>
  40. Wenn ein <classname>Zend_Config</classname> Objekt geändert oder erstellt wird, muß man einige Dinge wissen.
  41. Um einen Wert zu erstellen oder zu ändern muß einfach der Parameter des <classname>Zend_Config</classname>
  42. Objektes über den Zugriffsaccessor (<code>-&gt;</code>) gesetzt werden. Um eine Sektion im Root
  43. oder im Branch zu erstellen muß einfach ein neues Aray erstellt werden
  44. (<code>$config-&gt;branch = array();</code>). Um zu definieren welche Sektion eine andere
  45. erweitert, muß die <code>setExtend()</code> Methode am Root <classname>Zend_Config</classname> Objekt
  46. aufgerufen werden.
  47. </para>
  48. <example id="zend.config.writer.example.using">
  49. <title>Verwenden von Zend_Config_Writer</title>
  50. <para>
  51. Dieses Beispiel zeigt die grundsätzliche Verwendung von <classname>Zend_Config_Writer_Xml</classname>
  52. um eine neue Konfigurationsdatei zu erstellen:
  53. </para>
  54. <programlisting role="php"><![CDATA[
  55. // Ein neues Config Objekt erstellen
  56. $config = new Zend_Config(array(), true);
  57. $config->production = array();
  58. $config->staging = array();
  59. $config->setExtend('staging', 'production');
  60. $config->production->db = array();
  61. $config->production->db->hostname = 'localhost';
  62. $config->production->db->username = 'production';
  63. $config->staging->db = array();
  64. $config->staging->db->username = 'staging';
  65. // Die Config Datei auf einem der folgenden Wege schreiben:
  66. // a)
  67. $writer = new Zend_Config_Writer_Xml(array('config' => $config,
  68. 'filename' => 'config.xml'));
  69. $writer->write();
  70. // b)
  71. $writer = new Zend_Config_Writer_Xml();
  72. $writer->setConfig($config)
  73. ->setFilename('config.xml')
  74. ->write();
  75. // c)
  76. $writer = new Zend_Config_Writer_Xml();
  77. $writer->write('config.xml', $config);
  78. ]]></programlisting>
  79. <para>
  80. Das erstellt eine XML Config Datei mit den Sektionen production und staging, wobei staging
  81. production erweitert.
  82. </para>
  83. </example>
  84. <example id="zend.config.writer.modifying">
  85. <title>Eine bestehende Config ändern</title>
  86. <para>
  87. Dieses Beispiel zeigt wie eine bestehende Config Datei bearbeitet werden kann.
  88. </para>
  89. <programlisting role="php"><![CDATA[
  90. // Lädt alle Sektionen einer bestehenden Config Datei, und überspringt
  91. // alle Erweiterungen
  92. $config = new Zend_Config_Ini('config.ini',
  93. null,
  94. array('skipExtends' => true,
  95. 'allowModifications' => true));
  96. // Ändere einen Wert
  97. $config->production->hostname = 'foobar';
  98. // Schreibe die Config Datei
  99. $writer = new Zend_Config_Writer_Ini(array('config' => $config,
  100. 'filename' => 'config.ini'));
  101. $writer->write();
  102. ]]></programlisting>
  103. </example>
  104. <note>
  105. <title>Laden einer Config Datei</title>
  106. <para>
  107. Beim Laden einer bestehenden Config Datei für eine Änderung ist es sehr wichtig das alle
  108. Sektionen geladen werden und die Erweiterungen übersprungen werden, sodas keine Werte
  109. zusammengefügt werden. Das wird durch die Übergabe von <code>skipExtends</code> als Option
  110. an den Constructor durchgeführt.
  111. </para>
  112. </note>
  113. </sect1>
  114. <!--
  115. vim:se ts=4 sw=4 et:
  116. -->