Zend_Config_Xml.xml 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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> permet aux développeurs de stocker des données de
  8. configuration dans un format simple <acronym>XML</acronym> et de les lire grâce à une
  9. syntaxe de propriétés d'objets imbriquées. Le nom de l'élément racine du fichier
  10. <acronym>XML</acronym> n'a pas d'importance et peut être nommé arbitrairement. Le premier
  11. niveau des éléments <acronym>XML</acronym> correspond aux sections des
  12. données de configuration. Le format <acronym>XML</acronym> supporte l'organisation
  13. hiérarchique par l'emboîtement des éléments <acronym>XML</acronym> à l'intérieur des
  14. éléments de niveau section. Le contenu d'un élément <acronym>XML</acronym> de niveau le
  15. plus bas correspond aux données de configuration. L'héritage des sections est supportée
  16. par un attribut spécial de <acronym>XML</acronym> nommé <emphasis>extends</emphasis>, et la
  17. valeur de cet attribut correspond à la section de laquelle des données doivent être
  18. héritées.
  19. </para>
  20. <note>
  21. <title>Type retourné</title>
  22. <para>
  23. Les données de configuration lues grâce à <classname>Zend_Config_Xml</classname> sont
  24. toujours des chaînes de caractères. La conversion des données à
  25. partir des chaînes de caractères vers d'autres types de données est laissée aux
  26. développeurs en fonction de leurs besoins.
  27. </para>
  28. </note>
  29. <example id="zend.config.adapters.xml.example.using">
  30. <title>Utiliser Zend_Config_Xml</title>
  31. <para>
  32. Cet exemple illustre une utilisation de base de <classname>Zend_Config_Xml</classname>
  33. pour le chargement des données de configuration à partir d'un fichier
  34. <acronym>XML</acronym>. Dans cet
  35. exemple il y a des données de configuration pour un environnement de production et pour
  36. un environnement de test. Puisque les données de configuration de l'environnement de
  37. test sont très semblables à celles de la production, la section de test hérite de la
  38. section de production. Dans ce cas, la décision est arbitraire et pourrait avoir été
  39. écrite réciproquement, avec la section de production héritant de la section de test,
  40. bien que ceci ne doit pas être le cas pour des situations plus complexes. Supposons,
  41. que les données suivantes de configuration sont contenues dans
  42. <filename>/chemin/vers/config.xml</filename>&#160;:
  43. </para>
  44. <programlisting language="xml"><![CDATA[
  45. <?xml version="1.0"?>
  46. <configdata>
  47. <production>
  48. <webhost>www.example.com</webhost>
  49. <database>
  50. <adapter>pdo_mysql</adapter>
  51. <params>
  52. <host>db.example.com</host>
  53. <username>dbuser</username>
  54. <password>secret</password>
  55. <dbname>dbname</dbname>
  56. </params>
  57. </database>
  58. </production>
  59. <test extends="production">
  60. <database>
  61. <params>
  62. <host>dev.example.com</host>
  63. <username>devuser</username>
  64. <password>devsecret</password>
  65. </params>
  66. </database>
  67. </test>
  68. </configdata>
  69. ]]></programlisting>
  70. <para>
  71. Ensuite, supposons que le développeur a besoin des données de configuration de
  72. test issues du fichier <acronym>XML</acronym>. Il est facile de charger ces données
  73. en indiquant le fichier <acronym>XML</acronym> et la section de test&#160;:
  74. </para>
  75. <programlisting language="php"><![CDATA[
  76. $config = new Zend_Config_Xml('/chemin/vers/config.xml', 'test');
  77. echo $config->database->params->host; // affiche "dev.example.com"
  78. echo $config->database->params->dbname; // affiche "dbname"
  79. ]]></programlisting>
  80. </example>
  81. <example id="zend.config.adapters.xml.example.attributes">
  82. <title>Utilisation des attributs de balise avec Zend_Config_Xml</title>
  83. <para>
  84. <classname>Zend_Config_Xml</classname> supporte aussi 2 autres manières de définir des
  85. noeuds dans la configuration. Celles-ci utilisent les attributs de balises. Puisque les
  86. attributs <emphasis>extends</emphasis> et <emphasis>value</emphasis> sont des mots
  87. réservés (ce dernier par la seconde manière d'utiliser les attributs), ils ne doivent
  88. pas être utilisés. La première manière d'utiliser les attributs est de les ajouter
  89. au noeud parent, ils seront ainsi interprétés en tant qu'enfant de ce noeud&#160;:
  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"
  97. username="dbuser"
  98. password="secret"
  99. dbname="dbname"/>
  100. </database>
  101. </production>
  102. <staging extends="production">
  103. <database>
  104. <params host="dev.example.com"
  105. username="devuser"
  106. password="devsecret"/>
  107. </database>
  108. </staging>
  109. </configdata>
  110. ]]></programlisting>
  111. <para>
  112. La seconde manière ne permet pas vraiment de raccourcir la configuration, mais la
  113. rend plus facile à maintenir puisque vous n'avez pas à écrire les noms de balises deux
  114. fois. Vous créez simplement une balise vide ayant sa valeur dans
  115. <emphasis>value</emphasis>&#160;:
  116. </para>
  117. <programlisting language="xml"><![CDATA[
  118. <?xml version="1.0"?>
  119. <configdata>
  120. <production>
  121. <webhost>www.example.com</webhost>
  122. <database>
  123. <adapter value="pdo_mysql"/>
  124. <params>
  125. <host value="db.example.com"/>
  126. <username value="dbuser"/>
  127. <password value="secret"/>
  128. <dbname value="dbname"/>
  129. </params>
  130. </database>
  131. </production>
  132. <staging extends="production">
  133. <database>
  134. <params>
  135. <host value="dev.example.com"/>
  136. <username value="devuser"/>
  137. <password value="devsecret"/>
  138. </params>
  139. </database>
  140. </staging>
  141. </configdata>
  142. ]]></programlisting>
  143. </example>
  144. <note>
  145. <title>Chaînes de caractères XML</title>
  146. <para>
  147. <classname>Zend_Config_Xml</classname> est capable de charger une chaîne de caractères
  148. <acronym>XML</acronym> directement, par exemple si elle est issue d'une base de données.
  149. La chaîne est fournie en tant que premier paramètre du constructeur et doit commencer
  150. par les caractères <emphasis>'&lt;?xml'</emphasis>&#160;:
  151. </para>
  152. <programlisting language="xml"><![CDATA[
  153. $string = <<<EOT
  154. <?xml version="1.0"?>
  155. <config>
  156. <production>
  157. <db>
  158. <adapter value="pdo_mysql"/>
  159. <params>
  160. <host value="db.example.com"/>
  161. </params>
  162. </db>
  163. </production>
  164. <staging extends="production">
  165. <db>
  166. <params>
  167. <host value="dev.example.com"/>
  168. </params>
  169. </db>
  170. </staging>
  171. </config>
  172. EOT;
  173. $config = new Zend_Config_Xml($string, 'staging');
  174. ]]></programlisting>
  175. </note>
  176. <note>
  177. <title>Espace de noms XML de Zend_Config</title>
  178. <para>
  179. <classname>Zend_Config</classname> possède son propre espace de noms
  180. <acronym>XML</acronym>, qui ajoute des fonctionnalités additionnelles lors du
  181. processus d'analyse. Pour tirer avantage de celui-ci, vous devez définir l'espace
  182. de noms avec l'<acronym>URI</acronym>
  183. <filename>http://framework.zend.com/xml/zesnd-config-xml/1.0/</filename> dans
  184. votre noeud racine de configuration.
  185. </para>
  186. <para>
  187. Avec l'espace de noms activé, vous pouvez maintenant utiliser les constantes
  188. <acronym>PHP</acronym> à l'intérieur de vos fichiers de configuration.
  189. De plus l'attribut <emphasis>extends</emphasis> a été déplacé dans ce nouvel
  190. espace de noms et déprécié de l'espace de noms <constant>NULL</constant>.
  191. Il en sera complètement effacé dans Zend Framework 2.0.
  192. </para>
  193. <programlisting language="xml"><![CDATA[
  194. $string = <<<EOT
  195. <?xml version="1.0"?>
  196. <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/">
  197. <production>
  198. <includePath>
  199. <zf:const zf:name="APPLICATION_PATH"/>/library</includePath>
  200. <db>
  201. <adapter value="pdo_mysql"/>
  202. <params>
  203. <host value="db.example.com"/>
  204. </params>
  205. </db>
  206. </production>
  207. <staging zf:extends="production">
  208. <db>
  209. <params>
  210. <host value="dev.example.com"/>
  211. </params>
  212. </db>
  213. </staging>
  214. </config>
  215. EOT;
  216. define('APPLICATION_PATH', dirname(__FILE__));
  217. $config = new Zend_Config_Xml($string, 'staging');
  218. echo $config->includePath; // Affiche "/var/www/something/library"
  219. ]]></programlisting>
  220. </note>
  221. </sect1>