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