Zend_Config_Writer.xml 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- EN-Revision: 24604 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.writer.introduction">
  5. <title>Zend_Config_Writer</title>
  6. <para>
  7. <classname>Zend_Config_Writer</classname> vous donne la possibilité d'écrire des
  8. fichiers de configuration à partir d'objets <classname>Zend_Config</classname>. Il
  9. fonctionne avec des adaptateurs détachés du système et est donc très simple à utiliser. Par
  10. défaut <classname>Zend_Config_Writer</classname> embarque trois adaptateurs, qui
  11. fonctionnent tous sur la base de fichiers. Vous instanciez un rédacteur ("writer") avec des
  12. options spécifiques, qui peuvent être <emphasis>filename</emphasis> et
  13. <emphasis>config</emphasis>. Ensuite
  14. vous pouvez appeler la méthode <methodname>write()</methodname> du rédacteur et le fichier
  15. de configuration est créé. Vous pouvez aussi fournir <varname>$filename</varname> et
  16. <varname>$config</varname> directement à la méthode <methodname>write()</methodname>.
  17. Actuellement les
  18. rédacteurs suivants sont embarqués avec <classname>Zend_Config_Writer</classname>&#160;:
  19. </para>
  20. <itemizedlist>
  21. <listitem>
  22. <para><classname>Zend_Config_Writer_Array</classname></para>
  23. </listitem>
  24. <listitem>
  25. <para><classname>Zend_Config_Writer_Ini</classname></para>
  26. </listitem>
  27. <listitem>
  28. <para><classname>Zend_Config_Writer_Json</classname></para>
  29. </listitem>
  30. <listitem>
  31. <para><classname>Zend_Config_Writer_Xml</classname></para>
  32. </listitem>
  33. <listitem>
  34. <para><classname>Zend_Config_Writer_Yaml</classname></para>
  35. </listitem>
  36. </itemizedlist>
  37. <para>
  38. Lors de la modification ou la création d'objet <classname>Zend_Config</classname>, il
  39. y a quelques informations à garder en mémoire. Pour créer ou modifier une valeur, vous
  40. appelez simplement le réglage d'un paramètre d'un objet <classname>Zend_Config</classname>
  41. grâce à l'accesseur de paramètre ("<emphasis>-&gt;</emphasis>"). Pour créer une section à
  42. la racine ou pour créer une branche, vous avez juste à créer un nouveau tableau
  43. (<command>$config-&gt;branch = array();</command>). Pour définir quelle section en étend
  44. une autre, vous devez appeler la méthode <methodname>setExtend()</methodname> sur l'objet
  45. <classname>Zend_Config</classname> racine.
  46. </para>
  47. <example id="zend.config.writer.example.using">
  48. <title>Utilisation de Zend_Config_Writer</title>
  49. <para>
  50. Cet exemple illustre une utilisation basique
  51. <classname>Zend_Config_Writer_Xml</classname> pour créer un nouveau fichier de
  52. configuration&#160;:
  53. </para>
  54. <programlisting language="php"><![CDATA[
  55. // Créer l'objet de configuration
  56. $config = new Zend_Config(array(), true);
  57. $config->production = array();
  58. $config->staging = array();
  59. $config->setExtend('staging', 'production');
  60. $config->production->db = array();
  61. $config->production->db->hostname = 'localhost';
  62. $config->production->db->username = 'production';
  63. $config->staging->db = array();
  64. $config->staging->db->username = 'staging';
  65. // Ecrire le fichier de l'une des manières suivantes :
  66. // a)
  67. $writer = new Zend_Config_Writer_Xml(array('config' => $config,
  68. 'filename' => 'config.xml'));
  69. $writer->write();
  70. // b)
  71. $writer = new Zend_Config_Writer_Xml();
  72. $writer->setConfig($config)
  73. ->setFilename('config.xml')
  74. ->write();
  75. // c)
  76. $writer = new Zend_Config_Writer_Xml();
  77. $writer->write('config.xml', $config);
  78. ]]></programlisting>
  79. <para>
  80. Ceci créera un fichier de configuration <acronym>XML</acronym> avec les sections
  81. "production" et "staging", où "staging" étend "production".
  82. </para>
  83. </example>
  84. <example id="zend.config.writer.modifying">
  85. <title>Modifier une configuration existante</title>
  86. <para>
  87. Cet exemple montre comment modifier un fichier de configuration
  88. existant&#160;:
  89. </para>
  90. <programlisting language="php"><![CDATA[
  91. // Charger toutes les sections d'un fichier de configuration existant,
  92. // tout en évitant les sections étendues.
  93. $config = new Zend_Config_Ini('config.ini',
  94. null,
  95. array('skipExtends' => true,
  96. 'allowModifications' => true));
  97. // Modifier une valeur
  98. $config->production->hostname = 'foobar';
  99. // Ecrire le fichier
  100. $writer = new Zend_Config_Writer_Ini(array('config' => $config,
  101. 'filename' => 'config.ini'));
  102. $writer->write();
  103. ]]></programlisting>
  104. </example>
  105. <note>
  106. <title>Chargement d'un fichier de configuration</title>
  107. <para>
  108. Lors du chargement d'un fichier de configuration existant afin de le modifier, il
  109. est très important de charger toutes les sections et d'éviter les sections étendues,
  110. évitant ainsi toute fusion de valeurs. Ceci est réalisé en fournissant l'option
  111. <emphasis>skipExtends</emphasis> au constructeur.
  112. </para>
  113. </note>
  114. <para>
  115. Pour tous les rédacteurs à base de fichiers (<acronym>INI</acronym>,
  116. <acronym>JSON</acronym>, <acronym>XML</acronym>, <acronym>YAML</acronym>,
  117. et tableau <acronym>PHP</acronym>), en interne la méthode <methodname>render()</methodname>
  118. est utilisée pour construire la chaîne de configuration. Cette méthode peut être utilisée
  119. en dehors de la classe si vous souhaitez accéder à une représentation textuelle de vos
  120. données de configuration.
  121. </para>
  122. <sect2 id="zend.config.writer.introduction.ini-notes">
  123. <title>Notes spécifiques au rédacteur INI</title>
  124. <itemizedlist>
  125. <listitem>
  126. <para>
  127. Le rédacteur <acronym>INI</acronym> possède deux modes de rendu en fonction des
  128. sections. Par défaut la configuration de premier niveau est toujours écrite
  129. dans des noms de section. En appelant
  130. <command>$writer->setRenderWithoutSections();</command>, toutes les options
  131. sont écrites dans l'espace de noms global du fichier <acronym>INI</acronym>
  132. et aucune section n'est appliquée.
  133. </para>
  134. </listitem>
  135. <listitem>
  136. <para>
  137. De plus, <classname>Zend_Config_Writer_Ini</classname> a un
  138. paramètre optionnel additionnel <emphasis>nestSeparator</emphasis>, définissant
  139. le caractère séparant les profondeurs d'imbrication. Par défaut il s'agit
  140. du point, comme <classname>Zend_Config_Ini</classname> l'accepte par défaut.
  141. </para>
  142. </listitem>
  143. </itemizedlist>
  144. </sect2>
  145. <sect2 id="zend.config.writer.introduction.yaml-notes">
  146. <title>Notes spécifiques au rédacteur YAML</title>
  147. <para>
  148. Le rédacteur <acronym>YAML</acronym> vous permet de spécifier un encodeur
  149. <acronym>YAML</acronym> alternatif. Dans la plupart des cas, celui embarqué dans
  150. le framework suffira amplement. Si vous le trouvez insuffisant, ou que vous souhaitez
  151. une YAML plus avancé, vous pouvez fournir un autre encodeur.
  152. </para>
  153. <para>
  154. La mthode pour le faire est
  155. <methodname>Zend_Config_Writer_Yaml::setYamlEncoder()</methodname>, vous devez lui
  156. fournir un callback valide.
  157. </para>
  158. <programlisting language="php"><![CDATA[
  159. // Use the Symfony Yaml Component:
  160. $writer = new Zend_Config_Writer_Yaml($filename);
  161. $writer->setYamlEncoder(array('sfYaml', 'dump'));
  162. ]]></programlisting>
  163. <para>
  164. Ci-dessus nous utilisons le composant de Symfony <classname>sfYaml</classname> pour
  165. encoder la configuration en <acronym>YAML</acronym>.
  166. </para>
  167. </sect2>
  168. </sect1>