Zend_Config_Writer.xml 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20765 -->
  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 três adaptadores, que são todos
  11. baseados em arquivos. Você instanciará um escritor com opções específicas, que podem ser
  12. <emphasis>filename</emphasis> e <emphasis>config</emphasis>. Em seguida, você irá chamar o
  13. método <methodname>write()</methodname> do escritor e o arquivo de configuração será criado.
  14. 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_Xml</classname>
  32. </para>
  33. </listitem>
  34. </itemizedlist>
  35. <para>
  36. O escritor <acronym>INI</acronym> possui dois modos de renderização no que diz respeito às
  37. seções. Por padrão, a configuração de maior nível é sempre escrita em nomes de seção.
  38. Chamando <command>$writer->setRenderWithoutSections();</command> todas as opções estarão
  39. escritas em um namespace global do arquivo <acronym>INI</acronym> e nenhuma seção será
  40. aplicada.
  41. </para>
  42. <para>
  43. O <classname>Zend_Config_Writer_Ini</classname> tem como adicional, a opção de parâmetro
  44. <emphasis>nestSeparator</emphasis>, que define o caractere com que os nós são separados.
  45. O padrão é um ponto simples, como é o padrão também para
  46. <classname>Zend_Config_Ini</classname>.
  47. </para>
  48. <para>
  49. Ao modificar ou criar um objeto <classname>Zend_Config</classname>, há algumas coisas que se
  50. deve conhecer. Para criar ou modificar um valor, basta definir o parâmetro do objeto
  51. <classname>Zend_Config</classname> através do assessor de parâmetro
  52. (<emphasis>-&gt;</emphasis>). Para criar uma seção na raiz ou para criar um ramo, você
  53. apenas irá criar uma nova matriz ("<command>$config-&gt;branch = array();</command>"). Para
  54. definir qual seção estende outra, você chamará o método <methodname>setExtend()</methodname>
  55. na raiz do objeto <classname>Zend_Config</classname>.
  56. </para>
  57. <example id="zend.config.writer.example.using">
  58. <title>Usando o Zend_Config_Writer</title>
  59. <para>
  60. Este exemplo ilustra a utilização básica de
  61. <classname>Zend_Config_Writer_Xml</classname>
  62. para criar um novo arquivo de configuração:
  63. </para>
  64. <programlisting language="php"><![CDATA[
  65. // Cria o objeto de configuração
  66. $config = new Zend_Config(array(), true);
  67. $config->production = array();
  68. $config->staging = array();
  69. $config->setExtend('staging', 'production');
  70. $config->production->db = array();
  71. $config->production->db->hostname = 'localhost';
  72. $config->production->db->username = 'production';
  73. $config->staging->db = array();
  74. $config->staging->db->username = 'staging';
  75. // Escreve o arquivo de configuração em uma das seguintes formas:
  76. // a)
  77. $writer = new Zend_Config_Writer_Xml(array('config' => $config,
  78. 'filename' => 'config.xml'));
  79. $writer->write();
  80. // b)
  81. $writer = new Zend_Config_Writer_Xml();
  82. $writer->setConfig($config)
  83. ->setFilename('config.xml')
  84. ->write();
  85. // c)
  86. $writer = new Zend_Config_Writer_Xml();
  87. $writer->write('config.xml', $config);
  88. ]]></programlisting>
  89. <para>
  90. Isso criará um arquivo de configuração <acronym>XML</acronym> com as seções de produção
  91. e de testes, onde testes estende produção.
  92. </para>
  93. </example>
  94. <example id="zend.config.writer.modifying">
  95. <title>Modificando uma Configuração Existente</title>
  96. <para>
  97. Este exemplo demonstra como editar um arquivo de configuração existente.
  98. </para>
  99. <programlisting language="php"><![CDATA[
  100. // Carrega todas as seções de um arquivo de configuração
  101. // existente, enquanto pula o que é estendido.
  102. $config = new Zend_Config_Ini('config.ini',
  103. null,
  104. array('skipExtends' => true,
  105. 'allowModifications' => true));
  106. // Modifica um valor
  107. $config->production->hostname = 'foobar';
  108. // Escreve o arquivo de configuração
  109. $writer = new Zend_Config_Writer_Ini(array('config' => $config,
  110. 'filename' => 'config.ini'));
  111. $writer->write();
  112. ]]></programlisting>
  113. </example>
  114. <note>
  115. <title>Carregando um Arquivo de Configuração</title>
  116. <para>
  117. Ao carregar um arquivo de configuração existente para modificações, é muito importante
  118. que se carregue todas as seções e que se pule tudo o que é estendido, para que valores
  119. não sejam fundidos. Isto é feito passando o <emphasis>skipExtends</emphasis> como opção
  120. para o construtor.
  121. </para>
  122. </note>
  123. <para>
  124. Para todos os escritores baseados em arquivo (<acronym>INI</acronym>, <acronym>XML</acronym>
  125. e Matriz <acronym>PHP</acronym>) internamente o <methodname>render()</methodname> é usado
  126. para construir a string de configuração. Este método também pode ser usado externamente caso
  127. precise acessar a string de representação dos dados de configuração.
  128. </para>
  129. </sect1>
  130. <!--
  131. vim:se ts=4 sw=4 et:
  132. -->