Zend_Config_Writer.xml 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.config.writer.introduction">
  5. <title>Zend_Config_Writer</title>
  6. <para>
  7. <classname>Zend_Config_Writer</classname> lhe dá a capacidade de escrever arquivos de
  8. configuração a partir de objetos <classname>Zend_Config</classname>. Ele funciona com
  9. adaptadores separados do sistema e muito fáceis de usar. Por padrão, o
  10. <classname>Zend_Config_Writer</classname> vêm embarcado com quatro adaptadores, que são
  11. todos baseados em arquivos. Você instanciará um escritor com opções específicas, que podem
  12. ser <emphasis>filename</emphasis> e <emphasis>config</emphasis>. Em seguida, você irá chamar
  13. o método <methodname>write()</methodname> do escritor e o arquivo de configuração será
  14. criado. Você também pode fornecer <varname>$filename</varname> e <varname>$config</varname>
  15. diretamente ao método <methodname>write()</methodname>. Atualmente os escritores que se
  16. seguem são fornecidos com <classname>Zend_Config_Writer</classname>:
  17. </para>
  18. <itemizedlist>
  19. <listitem>
  20. <para>
  21. <classname>Zend_Config_Writer_Array</classname>
  22. </para>
  23. </listitem>
  24. <listitem>
  25. <para>
  26. <classname>Zend_Config_Writer_Ini</classname>
  27. </para>
  28. </listitem>
  29. <listitem>
  30. <para>
  31. <classname>Zend_Config_Writer_Json</classname>
  32. </para>
  33. </listitem>
  34. <listitem>
  35. <para>
  36. <classname>Zend_Config_Writer_Xml</classname>
  37. </para>
  38. </listitem>
  39. <listitem>
  40. <para>
  41. <classname>Zend_Config_Writer_Yaml</classname>
  42. </para>
  43. </listitem>
  44. </itemizedlist>
  45. <para>
  46. Ao modificar ou criar um objeto <classname>Zend_Config</classname>, há algumas coisas que se
  47. deve conhecer. Para criar ou modificar um valor, basta definir o parâmetro do objeto
  48. <classname>Zend_Config</classname> através do assessor de parâmetro
  49. (<emphasis>-&gt;</emphasis>). Para criar uma seção na raiz ou para criar um ramo, você
  50. apenas irá criar uma nova matriz ("<command>$config-&gt;branch = array();</command>"). Para
  51. definir qual seção estende outra, você chamará o método <methodname>setExtend()</methodname>
  52. na raiz do objeto <classname>Zend_Config</classname>.
  53. </para>
  54. <example id="zend.config.writer.example.using">
  55. <title>Usando o Zend_Config_Writer</title>
  56. <para>
  57. Este exemplo ilustra a utilização básica de
  58. <classname>Zend_Config_Writer_Xml</classname>
  59. para criar um novo arquivo de configuração:
  60. </para>
  61. <programlisting language="php"><![CDATA[
  62. // Cria o objeto de configuração
  63. $config = new Zend_Config(array(), true);
  64. $config->production = array();
  65. $config->staging = array();
  66. $config->setExtend('staging', 'production');
  67. $config->production->db = array();
  68. $config->production->db->hostname = 'localhost';
  69. $config->production->db->username = 'production';
  70. $config->staging->db = array();
  71. $config->staging->db->username = 'staging';
  72. // Escreve o arquivo de configuração em uma das seguintes formas:
  73. // a)
  74. $writer = new Zend_Config_Writer_Xml(array('config' => $config,
  75. 'filename' => 'config.xml'));
  76. $writer->write();
  77. // b)
  78. $writer = new Zend_Config_Writer_Xml();
  79. $writer->setConfig($config)
  80. ->setFilename('config.xml')
  81. ->write();
  82. // c)
  83. $writer = new Zend_Config_Writer_Xml();
  84. $writer->write('config.xml', $config);
  85. ]]></programlisting>
  86. <para>
  87. Isso criará um arquivo de configuração <acronym>XML</acronym> com as seções de produção
  88. e de testes, onde testes estende produção.
  89. </para>
  90. </example>
  91. <example id="zend.config.writer.modifying">
  92. <title>Modificando uma Configuração Existente</title>
  93. <para>
  94. Este exemplo demonstra como editar um arquivo de configuração existente.
  95. </para>
  96. <programlisting language="php"><![CDATA[
  97. // Carrega todas as seções de um arquivo de configuração
  98. // existente, enquanto pula o que é estendido.
  99. $config = new Zend_Config_Ini('config.ini',
  100. null,
  101. array('skipExtends' => true,
  102. 'allowModifications' => true));
  103. // Modifica um valor
  104. $config->production->hostname = 'foobar';
  105. // Escreve o arquivo de configuração
  106. $writer = new Zend_Config_Writer_Ini(array('config' => $config,
  107. 'filename' => 'config.ini'));
  108. $writer->write();
  109. ]]></programlisting>
  110. </example>
  111. <note>
  112. <title>Carregando um Arquivo de Configuração</title>
  113. <para>
  114. Ao carregar um arquivo de configuração existente para modificações, é muito importante
  115. que se carregue todas as seções e que se pule tudo o que é estendido, para que valores
  116. não sejam fundidos. Isto é feito passando o <emphasis>skipExtends</emphasis> como opção
  117. para o construtor.
  118. </para>
  119. </note>
  120. <para>
  121. Para todos os escritores baseados em arquivo (<acronym>INI</acronym>,
  122. <acronym>JSON</acronym>, <acronym>XML</acronym>, <acronym>YAML</acronym> e Matriz
  123. <acronym>PHP</acronym>) internamente o <methodname>render()</methodname> é usado para
  124. construir a string de configuração. Este método pode ser usado de forma independente para
  125. acessar a string de representação dos dados de configuração.
  126. </para>
  127. <sect2 id="zend.config.writer.introduction.ini-notes">
  128. <title>Notes specific to the INI writer</title>
  129. <itemizedlist>
  130. <listitem>
  131. <para>
  132. The <acronym>INI</acronym> writer has two modes for rendering with regard to
  133. sections. By default the top-level configuration is always written into section
  134. names. By calling <command>$writer->setRenderWithoutSections();</command> all
  135. options are written into the global namespace of the <acronym>INI</acronym> file
  136. and no sections are applied.
  137. </para>
  138. </listitem>
  139. <listitem>
  140. <para>
  141. <classname>Zend_Config_Writer_Ini</classname> has an additional option parameter
  142. <emphasis>nestSeparator</emphasis>, which defines with which character the
  143. single nodes are separated. The default is a single dot, which is accepted by
  144. <classname>Zend_Config_Ini</classname> by default.
  145. </para>
  146. </listitem>
  147. </itemizedlist>
  148. </sect2>
  149. <sect2 id="zend.config.writer.introduction.yaml-notes">
  150. <title>Notes specific to the YAML writer</title>
  151. <para>
  152. The <acronym>YAML</acronym> writer lets you optionally specify an alternate
  153. <acronym>YAML</acronym> encoder to use. By default, one is shipped with the framework
  154. that is suitable for most configuration tasks. If you find it insufficient, or wish to
  155. use more advanced YAML, you may provide an alternate encoder callback.
  156. </para>
  157. <para>
  158. The method for doing so is to use the
  159. <methodname>Zend_Config_Writer_Yaml::setYamlEncoder()</methodname> method, passing it a
  160. valid callback.
  161. </para>
  162. <programlisting language="php"><![CDATA[
  163. // Use the Symfony Yaml Component:
  164. $writer = new Zend_Config_Writer_Yaml($filename);
  165. $writer->setYamlEncoder(array('sfYaml', 'dump'));
  166. ]]></programlisting>
  167. <para>
  168. The above uses the Symfony Components' <classname>sfYaml</classname> component in order
  169. to encode the configuration to <acronym>YAML</acronym>.
  170. </para>
  171. </sect2>
  172. </sect1>
  173. <!--
  174. vim:se ts=4 sw=4 et:
  175. -->