Zend_Config_Xml.xml 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.adapters.xml">
  5. <title>Zend_Config_Xml</title>
  6. <para>
  7. <classname>Zend_Config_Xml</classname> ermöglicht es Entwicklern, Konfigurations-Daten in
  8. einfachen XML-Dateien zu speichern und sie mit einer Syntax auszulesen, die dem Zugriff auf
  9. die Eigenschaften verschachtelter Objekte entspricht. Der Name des Root-Elementes der
  10. XML-Datei oder des Strings ist unwichtig und kann beliebig gewählt werden. Die erste Ebene
  11. der XML-Struktur stellt die Konfigurationsdaten-Sektionen dar. Hirarchische Strukturen
  12. können im XLM-Format durch Verschachteln von XML-Elementen unterhalb der Sektions-Ebene
  13. umgesetzt werden. Der Inhalt eines XML-Blatt-Elementes (Leaf) ist der Wert eines
  14. Konfigurations-Eintrages. Die Sektions-Vererbung wird durch ein spezielles Attribut namens
  15. <code>extends</code> unterstützt, der Wert des Attributs entspricht dabei dem Namen der
  16. Sektion, von der Daten geerbt werden sollen.
  17. </para>
  18. <note>
  19. <title>Rückgabe Typen</title>
  20. <para>
  21. Konfigurations-Daten, die in <classname>Zend_Config_Xml</classname> eingelesen wurden,
  22. werden immer als Strings zurück gegeben. Die Konvertierung der Daten von Strings in
  23. andere Datentypen ist Aufgabe der Entwickler und von deren Bedürfnissen abhängig.
  24. </para>
  25. </note>
  26. <example id="zend.config.adapters.xml.example.using">
  27. <title>Zend_Config_Xml benutzen</title>
  28. <para>
  29. Dieses Beispiel zeigt die grundlegende Nutzung von
  30. <classname>Zend_Config_Xml</classname> um Konfigurations-Daten aus einem XML-File zu
  31. laden. In diesem Beispiel gibt es Konfigurations-Daten für ein Produktiv- und ein
  32. Staging-System. Da sich die Daten für das Staging-System nur unwesentlich von denen für
  33. das Produktiv-System unterscheiden, erbt das Staging-System vom Produktiv-System. In
  34. diesem Fall ist die Entscheidung darüber, welche Sektion von welcher erben soll,
  35. willkürlich und es könnte auch anders herum gemacht werden. In komplexeren Fällen ist
  36. das möglicherweise nicht der Fall. Nehmen wir also an, dass sich die folgenden
  37. Konfigurations-Daten in der Datei <code>/path/to/config.xml</code> befinden:
  38. </para>
  39. <programlisting language="xml"><![CDATA[
  40. <?xml version="1.0"?>
  41. <configdata>
  42. <production>
  43. <webhost>www.example.com</webhost>
  44. <database>
  45. <adapter>pdo_mysql</adapter>
  46. <params>
  47. <host>db.example.com</host>
  48. <username>dbuser</username>
  49. <password>secret</password>
  50. <dbname>dbname</dbname>
  51. </params>
  52. </database>
  53. </production>
  54. <staging extends="production">
  55. <database>
  56. <params>
  57. <host>dev.example.com</host>
  58. <username>devuser</username>
  59. <password>devsecret</password>
  60. </params>
  61. </database>
  62. </staging>
  63. </configdata>
  64. ]]></programlisting>
  65. <para>
  66. Nehmen wir weiterhin an, dass der Anwendungs-Entwickler die Staging-Konfiguration aus
  67. diesem XML-File benötigt. Es ist ein Leichtes, diese Daten zu laden, es muss nur das
  68. XML-File und die Staging-Sektion spezifiziert werden:
  69. </para>
  70. <programlisting language="php"><![CDATA[
  71. $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
  72. echo $config->database->params->host; // ausgabe "dev.example.com"
  73. echo $config->database->params->dbname; // ausgabe "dbname"
  74. ]]></programlisting>
  75. </example>
  76. <example id="zend.config.adapters.xml.example.attributes">
  77. <title>Tag Attribute in Zend_Config_Xml verwenden</title>
  78. <para>
  79. <classname>Zend_Config_Xml</classname> unterstützt auch zwei zusätzliche Wege der
  80. Definition von Knoten in der Konfiguration. Beide verwenden Attribute. Da die
  81. <code>extends</code> und <code>value</code> Attribute reservierte Schlüsselwörter sind
  82. (das letztere durch den zweiten Weg der Verwendung von Attributen), können sie nicht
  83. verwendet werden. Der erste Weg Attribute zu verwenden ist das hinzufügen von Attributen
  84. zum Elternknoten, welcher dann in einen Kindknoten dieses Knotens übersetzt wird:
  85. </para>
  86. <programlisting language="xml"><![CDATA[
  87. <?xml version="1.0"?>
  88. <configdata>
  89. <production webhost="www.example.com">
  90. <database adapter="pdo_mysql">
  91. <params host="db.example.com" username="dbuser" password="secret" dbname="dbname"/>
  92. </database>
  93. </production>
  94. <staging extends="production">
  95. <database>
  96. <params host="dev.example.com" username="devuser" password="devsecret"/>
  97. </database>
  98. </staging>
  99. </configdata>
  100. ]]></programlisting>
  101. <para>
  102. Der andere Weg verkürzt die Konfiguration nicht wirklich, macht es aber einfacher in der
  103. Handhabung das der Tag-Name nicht zweimal geschrieben werden muß. Man erstellt einfach
  104. einen leeren Tag, welcher seinen Wert im <code>value</code> Attribut enthält:
  105. </para>
  106. <programlisting language="xml"><![CDATA[
  107. <?xml version="1.0"?>
  108. <configdata>
  109. <production>
  110. <webhost>www.example.com</webhost>
  111. <database>
  112. <adapter value="pdo_mysql"/>
  113. <params>
  114. <host value="db.example.com"/>
  115. <username value="dbuser"/>
  116. <password value="secret"/>
  117. <dbname value="dbname"/>
  118. </params>
  119. </database>
  120. </production>
  121. <staging extends="production">
  122. <database>
  123. <params>
  124. <host value="dev.example.com"/>
  125. <username value="devuser"/>
  126. <password value="devsecret"/>
  127. </params>
  128. </database>
  129. </staging>
  130. </configdata>
  131. ]]></programlisting>
  132. </example>
  133. <note>
  134. <title>XML Strings</title>
  135. <para>
  136. <classname>Zend_Config_Xml</classname> ist dazu in der Lage XML Strings direkt zu laden,
  137. wie z.B. deren Empfang von einer Datenbank. Der String wird als erster Parameter an den
  138. Konstruktor übergeben und muß mit den Zeichen <code>'&lt;?xml'</code> beginnen:
  139. </para>
  140. <programlisting language="xml"><![CDATA[
  141. $string = <<<EOT
  142. <?xml version="1.0"?>
  143. <config>
  144. <production>
  145. <db>
  146. <adapter value="pdo_mysql"/>
  147. <params>
  148. <host value="db.example.com"/>
  149. </params>
  150. </db>
  151. </production>
  152. <staging extends="production">
  153. <db>
  154. <params>
  155. <host value="dev.example.com"/>
  156. </params>
  157. </db>
  158. </staging>
  159. </config>
  160. EOT;
  161. $config = new Zend_Config_Xml($string, 'staging');
  162. ]]></programlisting>
  163. </note>
  164. </sect1>
  165. <!--
  166. vim:se ts=4 sw=4 et:
  167. -->