2
0

Zend_Config_Xml.xml 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  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 <acronym>XML</acronym> Dateien zu speichern und sie mit einer Syntax auszulesen,
  9. die dem Zugriff auf die Eigenschaften verschachtelter Objekte entspricht. Der Name des
  10. Root-Elementes der <acronym>XML</acronym> Datei oder des Strings ist unwichtig und kann
  11. beliebig gewählt werden. Die erste Ebene der <acronym>XML</acronym> Struktur stellt die
  12. Konfigurationsdaten-Sektionen dar. Hirarchische Strukturen können im <acronym>XML</acronym>
  13. Format durch Verschachteln von <acronym>XML</acronym> Elementen unterhalb der
  14. Sektions-Ebene umgesetzt werden. Der Inhalt eines <acronym>XML</acronym> Blatt-Elementes
  15. (Leaf) ist der Wert eines Konfigurations-Eintrages. Die Sektions-Vererbung wird durch ein
  16. spezielles <acronym>XML</acronym> Attribut namens <emphasis>extends</emphasis> unterstützt,
  17. der Wert des Attributs entspricht dabei dem Namen der Sektion, von der Daten geerbt werden
  18. sollen.
  19. </para>
  20. <note>
  21. <title>Rückgabe Typen</title>
  22. <para>
  23. Konfigurations-Daten, die in <classname>Zend_Config_Xml</classname> eingelesen wurden,
  24. werden immer als Strings zurück gegeben. Die Konvertierung der Daten von Strings in
  25. andere Datentypen ist Aufgabe der Entwickler und von deren Bedürfnissen abhängig.
  26. </para>
  27. </note>
  28. <example id="zend.config.adapters.xml.example.using">
  29. <title>Zend_Config_Xml benutzen</title>
  30. <para>
  31. Dieses Beispiel zeigt die grundlegende Nutzung von
  32. <classname>Zend_Config_Xml</classname> um Konfigurations-Daten aus einer
  33. <acronym>XML</acronym> Datei zu laden. In diesem Beispiel gibt es Konfigurations-Daten
  34. für ein Produktiv- und ein Staging-System. Da sich die Daten für das Staging-System nur
  35. unwesentlich von denen für das Produktiv-System unterscheiden, erbt das Staging-System
  36. vom Produktiv-System. In diesem Fall ist die Entscheidung darüber, welche Sektion von
  37. welcher erben soll, willkürlich und es könnte auch anders herum gemacht werden. In
  38. komplexeren Fällen ist das möglicherweise nicht der Fall. Nehmen wir also an, dass sich
  39. die folgenden Konfigurations-Daten in der Datei
  40. <filename>/path/to/config.xml</filename> befinden:
  41. </para>
  42. <programlisting language="xml"><![CDATA[
  43. <?xml version="1.0"?>
  44. <configdata>
  45. <production>
  46. <webhost>www.example.com</webhost>
  47. <database>
  48. <adapter>pdo_mysql</adapter>
  49. <params>
  50. <host>db.example.com</host>
  51. <username>dbuser</username>
  52. <password>secret</password>
  53. <dbname>dbname</dbname>
  54. </params>
  55. </database>
  56. </production>
  57. <staging extends="production">
  58. <database>
  59. <params>
  60. <host>dev.example.com</host>
  61. <username>devuser</username>
  62. <password>devsecret</password>
  63. </params>
  64. </database>
  65. </staging>
  66. </configdata>
  67. ]]></programlisting>
  68. <para>
  69. Nehmen wir weiterhin an, dass der Anwendungs-Entwickler die Staging-Konfiguration aus
  70. dieser <acronym>XML</acronym> Datei benötigt. Es ist ein Leichtes, diese Daten zu
  71. laden, es muss nur die <acronym>XML</acronym> Datei und die Staging-Sektion
  72. spezifiziert werden:
  73. </para>
  74. <programlisting language="php"><![CDATA[
  75. $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
  76. echo $config->database->params->host; // ausgabe "dev.example.com"
  77. echo $config->database->params->dbname; // ausgabe "dbname"
  78. ]]></programlisting>
  79. </example>
  80. <example id="zend.config.adapters.xml.example.attributes">
  81. <title>Tag Attribute in Zend_Config_Xml verwenden</title>
  82. <para>
  83. <classname>Zend_Config_Xml</classname> unterstützt auch zwei zusätzliche Wege der
  84. Definition von Knoten in der Konfiguration. Beide verwenden Attribute. Da die
  85. <emphasis>extends</emphasis> und <emphasis>value</emphasis> Attribute reservierte
  86. Schlüsselwörter sind (das letztere durch den zweiten Weg der Verwendung von
  87. Attributen), können sie nicht verwendet werden. Der erste Weg Attribute zu
  88. verwenden ist das hinzufügen von Attributen zum Elternknoten, welcher dann in einen
  89. Kindknoten dieses Knotens übersetzt wird:
  90. </para>
  91. <programlisting language="xml"><![CDATA[
  92. <?xml version="1.0"?>
  93. <configdata>
  94. <production webhost="www.example.com">
  95. <database adapter="pdo_mysql">
  96. <params host="db.example.com" username="dbuser" password="secret"
  97. dbname="dbname"/>
  98. </database>
  99. </production>
  100. <staging extends="production">
  101. <database>
  102. <params host="dev.example.com" username="devuser"
  103. password="devsecret"/>
  104. </database>
  105. </staging>
  106. </configdata>
  107. ]]></programlisting>
  108. <para>
  109. Der andere Weg verkürzt die Konfiguration nicht wirklich, macht es aber einfacher in der
  110. Handhabung das der Tag-Name nicht zweimal geschrieben werden muß. Man erstellt einfach
  111. einen leeren Tag, welcher seinen Wert im <emphasis>value</emphasis> Attribut enthält:
  112. </para>
  113. <programlisting language="xml"><![CDATA[
  114. <?xml version="1.0"?>
  115. <configdata>
  116. <production>
  117. <webhost>www.example.com</webhost>
  118. <database>
  119. <adapter value="pdo_mysql"/>
  120. <params>
  121. <host value="db.example.com"/>
  122. <username value="dbuser"/>
  123. <password value="secret"/>
  124. <dbname value="dbname"/>
  125. </params>
  126. </database>
  127. </production>
  128. <staging extends="production">
  129. <database>
  130. <params>
  131. <host value="dev.example.com"/>
  132. <username value="devuser"/>
  133. <password value="devsecret"/>
  134. </params>
  135. </database>
  136. </staging>
  137. </configdata>
  138. ]]></programlisting>
  139. </example>
  140. <note>
  141. <title>XML Strings</title>
  142. <para>
  143. <classname>Zend_Config_Xml</classname> ist dazu in der Lage <acronym>XML</acronym>
  144. Strings direkt zu laden, wie z.B. deren Empfang von einer Datenbank. Der String wird
  145. als erster Parameter an den Konstruktor übergeben und muß mit den Zeichen
  146. <emphasis>'&lt;?xml'</emphasis> beginnen:
  147. </para>
  148. <programlisting language="xml"><![CDATA[
  149. $string = <<<EOT
  150. <?xml version="1.0"?>
  151. <config>
  152. <production>
  153. <db>
  154. <adapter value="pdo_mysql"/>
  155. <params>
  156. <host value="db.example.com"/>
  157. </params>
  158. </db>
  159. </production>
  160. <staging extends="production">
  161. <db>
  162. <params>
  163. <host value="dev.example.com"/>
  164. </params>
  165. </db>
  166. </staging>
  167. </config>
  168. EOT;
  169. $config = new Zend_Config_Xml($string, 'staging');
  170. ]]></programlisting>
  171. </note>
  172. <note>
  173. <title>Zend_Config XML Namespace</title>
  174. <para>
  175. <classname>Zend_Config</classname> kommt mit seinem eigenen <acronym>XML</acronym>
  176. Namespace, welcher zusätzliche Funktionalität beim Parsing Prozess hinzufügt. Um diese
  177. Vorteile zu verwenden, muß ein Namespace mit der Namespace <acronym>URI</acronym>
  178. <filename>http://framework.zend.com/xml/zend-config-xml/1.0/</filename> im Root Node der
  179. Konfiguration definiert werden.
  180. </para>
  181. <para>
  182. Wenn der Namespace aktiviert ist, können <acronym>PHP</acronym> Konstanten in den
  183. Konfigurationsdateien verwendet werden. Zusätzlich ist das <emphasis>extends</emphasis>
  184. Attribut in den neuen Namespace gewandert und in im <constant>NULL</constant> Namespace
  185. nicht mehr erlaubt. Es wird mit Zend Framework 2.0 komplett entfernt.
  186. </para>
  187. <programlisting language="xml"><![CDATA[
  188. $string = <<<EOT
  189. <?xml version="1.0"?>
  190. <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
  191. <production>
  192. <includePath>
  193. <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
  194. <db>
  195. <adapter value="pdo_mysql"/>
  196. <params>
  197. <host value="db.example.com"/>
  198. </params>
  199. </db>
  200. </production>
  201. <staging zf:extends="production">
  202. <db>
  203. <params>
  204. <host value="dev.example.com"/>
  205. </params>
  206. </db>
  207. </staging>
  208. </config>
  209. EOT;
  210. define('APPLICATION_PATH', dirname(__FILE__));
  211. $config = new Zend_Config_Xml($string, 'staging');
  212. echo $config->includePath; // Ausgabe "/var/www/something/library"
  213. ]]></programlisting>
  214. </note>
  215. </sect1>