| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- <?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> permet aux développeurs de stocker des données de
- configuration dans un format simple <acronym>XML</acronym> et de les lire grâce à une
- syntaxe de propriétés d'objets imbriquées. Le nom de l'élément racine du fichier
- <acronym>XML</acronym> n'a pas d'importance et peut être nommé arbitrairement. Le premier
- niveau des éléments <acronym>XML</acronym> correspond aux sections des
- données de configuration. Le format <acronym>XML</acronym> supporte l'organisation
- hiérarchique par l'emboîtement des éléments <acronym>XML</acronym> à l'intérieur des
- éléments de niveau section. Le contenu d'un élément <acronym>XML</acronym> de niveau le
- plus bas correspond aux données de configuration. L'héritage des sections est supportée
- par un attribut spécial de <acronym>XML</acronym> nommé <emphasis>extends</emphasis>, et la
- valeur de cet attribut correspond à la section de laquelle des données doivent être
- héritées.
- </para>
- <note>
- <title>Type retourné</title>
- <para>
- Les données de configuration lues grâce à <classname>Zend_Config_Xml</classname> sont
- toujours des chaînes de caractères. La conversion des données à
- partir des chaînes de caractères vers d'autres types de données est laissée aux
- développeurs en fonction de leurs besoins.
- </para>
- </note>
- <example id="zend.config.adapters.xml.example.using">
- <title>Utiliser Zend_Config_Xml</title>
- <para>
- Cet exemple illustre une utilisation de base de <classname>Zend_Config_Xml</classname>
- pour le chargement des données de configuration à partir d'un fichier
- <acronym>XML</acronym>. Dans cet
- exemple il y a des données de configuration pour un environnement de production et pour
- un environnement de test. Puisque les données de configuration de l'environnement de
- test sont très semblables à celles de la production, la section de test hérite de la
- section de production. Dans ce cas, la décision est arbitraire et pourrait avoir été
- écrite réciproquement, avec la section de production héritant de la section de test,
- bien que ceci ne doit pas être le cas pour des situations plus complexes. Supposons,
- que les données suivantes de configuration sont contenues dans
- <filename>/chemin/vers/config.xml</filename> :
- </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>
- <test extends="production">
- <database>
- <params>
- <host>dev.example.com</host>
- <username>devuser</username>
- <password>devsecret</password>
- </params>
- </database>
- </test>
- </configdata>
- ]]></programlisting>
- <para>
- Ensuite, supposons que le développeur a besoin des données de configuration de
- test issues du fichier <acronym>XML</acronym>. Il est facile de charger ces données
- en indiquant le fichier <acronym>XML</acronym> et la section de test :
- </para>
- <programlisting language="php"><![CDATA[
- $config = new Zend_Config_Xml('/chemin/vers/config.xml', 'test');
- echo $config->database->params->host; // affiche "dev.example.com"
- echo $config->database->params->dbname; // affiche "dbname"
- ]]></programlisting>
- </example>
- <example id="zend.config.adapters.xml.example.attributes">
- <title>Utilisation des attributs de balise avec Zend_Config_Xml</title>
- <para>
- <classname>Zend_Config_Xml</classname> supporte aussi 2 autres manières de définir des
- noeuds dans la configuration. Celles-ci utilisent les attributs de balises. Puisque les
- attributs <emphasis>extends</emphasis> et <emphasis>value</emphasis> sont des mots
- réservés (ce dernier par la seconde manière d'utiliser les attributs), ils ne doivent
- pas être utilisés. La première manière d'utiliser les attributs est de les ajouter
- au noeud parent, ils seront ainsi interprétés en tant qu'enfant de ce noeud :
- </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>
- La seconde manière ne permet pas vraiment de raccourcir la configuration, mais la
- rend plus facile à maintenir puisque vous n'avez pas à écrire les noms de balises deux
- fois. Vous créez simplement une balise vide ayant sa valeur dans
- <emphasis>value</emphasis> :
- </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>Chaînes de caractères XML</title>
- <para>
- <classname>Zend_Config_Xml</classname> est capable de charger une chaîne de caractères
- <acronym>XML</acronym> directement, par exemple si elle est issue d'une base de données.
- La chaîne est fournie en tant que premier paramètre du constructeur et doit commencer
- par les caractères <emphasis>'<?xml'</emphasis> :
- </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>Espace de noms XML de Zend_Config</title>
- <para>
- <classname>Zend_Config</classname> possède son propre espace de noms
- <acronym>XML</acronym>, qui ajoute des fonctionnalités additionnelles lors du
- processus d'analyse. Pour tirer avantage de celui-ci, vous devez définir l'espace
- de noms avec l'<acronym>URI</acronym>
- <filename>http://framework.zend.com/xml/zesnd-config-xml/1.0/</filename> dans
- votre noeud racine de configuration.
- </para>
- <para>
- Avec l'espace de noms activé, vous pouvez maintenant utiliser les constantes
- <acronym>PHP</acronym> à l'intérieur de vos fichiers de configuration.
- De plus l'attribut <emphasis>extends</emphasis> a été déplacé dans ce nouvel
- espace de noms et déprécié de l'espace de noms <constant>NULL</constant>.
- Il en sera complètement effacé dans Zend Framework 2.0.
- </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; // Affiche "/var/www/something/library"
- ]]></programlisting>
- </note>
- </sect1>
|