Zend_Config_Xml.xml 6.9 KB

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