| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.config.adapters.xml">
- <title>Zend_Config_Xml</title>
- <para>
- <classname>Zend_Config_Xml</classname> ermöglicht es Entwicklern, Konfigurations-Daten in
- einfachen <acronym>XML</acronym> Dateien zu speichern und sie mit einer Syntax auszulesen,
- die dem Zugriff auf die Eigenschaften verschachtelter Objekte entspricht. Der Name des
- Root-Elementes der <acronym>XML</acronym> Datei oder des Strings ist unwichtig und kann
- beliebig gewählt werden. Die erste Ebene der <acronym>XML</acronym> Struktur stellt die
- Konfigurationsdaten-Sektionen dar. Hirarchische Strukturen können im <acronym>XML</acronym>
- Format durch Verschachteln von <acronym>XML</acronym> Elementen unterhalb der
- Sektions-Ebene umgesetzt werden. Der Inhalt eines <acronym>XML</acronym> Blatt-Elementes
- (Leaf) ist der Wert eines Konfigurations-Eintrages. Die Sektions-Vererbung wird durch ein
- spezielles <acronym>XML</acronym> Attribut namens <emphasis>extends</emphasis> unterstützt,
- der Wert des Attributs entspricht dabei dem Namen der Sektion, von der Daten geerbt werden
- sollen.
- </para>
- <note>
- <title>Rückgabe Typen</title>
- <para>
- Konfigurations-Daten, die in <classname>Zend_Config_Xml</classname> eingelesen wurden,
- werden immer als Strings zurück gegeben. Die Konvertierung der Daten von Strings in
- andere Datentypen ist Aufgabe der Entwickler und von deren Bedürfnissen abhängig.
- </para>
- </note>
- <example id="zend.config.adapters.xml.example.using">
- <title>Zend_Config_Xml benutzen</title>
- <para>
- Dieses Beispiel zeigt die grundlegende Nutzung von
- <classname>Zend_Config_Xml</classname> um Konfigurations-Daten aus einer
- <acronym>XML</acronym> Datei zu laden. In diesem Beispiel gibt es Konfigurations-Daten
- für ein Produktiv- und ein Staging-System. Da sich die Daten für das Staging-System nur
- unwesentlich von denen für das Produktiv-System unterscheiden, erbt das Staging-System
- vom Produktiv-System. In diesem Fall ist die Entscheidung darüber, welche Sektion von
- welcher erben soll, willkürlich und es könnte auch anders herum gemacht werden. In
- komplexeren Fällen ist das möglicherweise nicht der Fall. Nehmen wir also an, dass sich
- die folgenden Konfigurations-Daten in der Datei
- <filename>/path/to/config.xml</filename> befinden:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0"?>
- <configdata>
- <production>
- <webhost>www.example.com</webhost>
- <database>
- <adapter>pdo_mysql</adapter>
- <params>
- <host>db.example.com</host>
- <username>dbuser</username>
- <password>secret</password>
- <dbname>dbname</dbname>
- </params>
- </database>
- </production>
- <staging extends="production">
- <database>
- <params>
- <host>dev.example.com</host>
- <username>devuser</username>
- <password>devsecret</password>
- </params>
- </database>
- </staging>
- </configdata>
- ]]></programlisting>
- <para>
- Nehmen wir weiterhin an, dass der Anwendungs-Entwickler die Staging-Konfiguration aus
- dieser <acronym>XML</acronym> Datei benötigt. Es ist ein Leichtes, diese Daten zu
- laden, es muss nur die <acronym>XML</acronym> Datei und die Staging-Sektion
- spezifiziert werden:
- </para>
- <programlisting language="php"><![CDATA[
- $config = new Zend_Config_Xml('/path/to/config.xml', 'staging');
- echo $config->database->params->host; // ausgabe "dev.example.com"
- echo $config->database->params->dbname; // ausgabe "dbname"
- ]]></programlisting>
- </example>
- <example id="zend.config.adapters.xml.example.attributes">
- <title>Tag Attribute in Zend_Config_Xml verwenden</title>
- <para>
- <classname>Zend_Config_Xml</classname> unterstützt auch zwei zusätzliche Wege der
- Definition von Knoten in der Konfiguration. Beide verwenden Attribute. Da die
- <emphasis>extends</emphasis> und <emphasis>value</emphasis> Attribute reservierte
- Schlüsselwörter sind (das letztere durch den zweiten Weg der Verwendung von
- Attributen), können sie nicht verwendet werden. Der erste Weg Attribute zu
- verwenden ist das hinzufügen von Attributen zum Elternknoten, welcher dann in einen
- Kindknoten dieses Knotens übersetzt wird:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0"?>
- <configdata>
- <production webhost="www.example.com">
- <database adapter="pdo_mysql">
- <params host="db.example.com" username="dbuser" password="secret"
- dbname="dbname"/>
- </database>
- </production>
- <staging extends="production">
- <database>
- <params host="dev.example.com" username="devuser"
- password="devsecret"/>
- </database>
- </staging>
- </configdata>
- ]]></programlisting>
- <para>
- Der andere Weg verkürzt die Konfiguration nicht wirklich, macht es aber einfacher in der
- Handhabung das der Tag-Name nicht zweimal geschrieben werden muß. Man erstellt einfach
- einen leeren Tag, welcher seinen Wert im <emphasis>value</emphasis> Attribut enthält:
- </para>
- <programlisting language="xml"><![CDATA[
- <?xml version="1.0"?>
- <configdata>
- <production>
- <webhost>www.example.com</webhost>
- <database>
- <adapter value="pdo_mysql"/>
- <params>
- <host value="db.example.com"/>
- <username value="dbuser"/>
- <password value="secret"/>
- <dbname value="dbname"/>
- </params>
- </database>
- </production>
- <staging extends="production">
- <database>
- <params>
- <host value="dev.example.com"/>
- <username value="devuser"/>
- <password value="devsecret"/>
- </params>
- </database>
- </staging>
- </configdata>
- ]]></programlisting>
- </example>
- <note>
- <title>XML Strings</title>
- <para>
- <classname>Zend_Config_Xml</classname> ist dazu in der Lage <acronym>XML</acronym>
- Strings direkt zu laden, wie z.B. deren Empfang von einer Datenbank. Der String wird
- als erster Parameter an den Konstruktor übergeben und muß mit den Zeichen
- <emphasis>'<?xml'</emphasis> beginnen:
- </para>
- <programlisting language="xml"><![CDATA[
- $string = <<<EOT
- <?xml version="1.0"?>
- <config>
- <production>
- <db>
- <adapter value="pdo_mysql"/>
- <params>
- <host value="db.example.com"/>
- </params>
- </db>
- </production>
- <staging extends="production">
- <db>
- <params>
- <host value="dev.example.com"/>
- </params>
- </db>
- </staging>
- </config>
- EOT;
- $config = new Zend_Config_Xml($string, 'staging');
- ]]></programlisting>
- </note>
- <note>
- <title>Zend_Config XML Namespace</title>
- <para>
- <classname>Zend_Config</classname> kommt mit seinem eigenen <acronym>XML</acronym>
- Namespace, welcher zusätzliche Funktionalität beim Parsing Prozess hinzufügt. Um diese
- Vorteile zu verwenden, muß ein Namespace mit der Namespace <acronym>URI</acronym>
- <filename>http://framework.zend.com/xml/zend-config-xml/1.0/</filename> im Root Node der
- Konfiguration definiert werden.
- </para>
- <para>
- Wenn der Namespace aktiviert ist, können <acronym>PHP</acronym> Konstanten in den
- Konfigurationsdateien verwendet werden. Zusätzlich ist das <emphasis>extends</emphasis>
- Attribut in den neuen Namespace gewandert und in im <constant>NULL</constant> Namespace
- nicht mehr erlaubt. Es wird mit Zend Framework 2.0 komplett entfernt.
- </para>
- <programlisting language="xml"><![CDATA[
- $string = <<<EOT
- <?xml version="1.0"?>
- <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
- <production>
- <includePath>
- <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
- <db>
- <adapter value="pdo_mysql"/>
- <params>
- <host value="db.example.com"/>
- </params>
- </db>
- </production>
- <staging zf:extends="production">
- <db>
- <params>
- <host value="dev.example.com"/>
- </params>
- </db>
- </staging>
- </config>
- EOT;
- define('APPLICATION_PATH', dirname(__FILE__));
- $config = new Zend_Config_Xml($string, 'staging');
- echo $config->includePath; // Ausgabe "/var/www/something/library"
- ]]></programlisting>
- </note>
- </sect1>
|