Zend_Config_Writer
Zend_Config_Writer lhe dá a capacidade de escrever arquivos de
configuração a partir de objetos Zend_Config. Ele funciona com
adaptadores separados do sistema e muito fáceis de usar. Por padrão, o
Zend_Config_Writer vêm embarcado com três adaptadores, que são todos
baseados em arquivos. Você instanciará um escritor com opções específicas, que podem ser
filename e config. Em seguida, você irá chamar o
método write() do escritor e o arquivo de configuração será criado.
Você também pode fornecer $filename e $config
diretamente ao método write(). Atualmente os escritores que se
seguem são fornecidos com Zend_Config_Writer:
Zend_Config_Writer_Array
Zend_Config_Writer_Ini
Zend_Config_Writer_Xml
O escritor INI possui dois modos de renderização no que diz respeito às
seções. Por padrão, a configuração de maior nível é sempre escrita em nomes de seção.
Chamando $writer->setRenderWithoutSections(); todas as opções estarão
escritas em um namespace global do arquivo INI e nenhuma seção será
aplicada.
O Zend_Config_Writer_Ini tem como adicional, a opção de parâmetro
nestSeparator, que define o caractere com que os nós são separados.
O padrão é um ponto simples, como é o padrão também para
Zend_Config_Ini.
Ao modificar ou criar um objeto Zend_Config, há algumas coisas que se
deve conhecer. Para criar ou modificar um valor, basta definir o parâmetro do objeto
Zend_Config através do assessor de parâmetro
(->). Para criar uma seção na raiz ou para criar um ramo, você
apenas irá criar uma nova matriz ("$config->branch = array();"). Para
definir qual seção estende outra, você chamará o método setExtend()
na raiz do objeto Zend_Config.
Usando o Zend_Config_Writer
Este exemplo ilustra a utilização básica de
Zend_Config_Writer_Xml
para criar um novo arquivo de configuração:
production = array();
$config->staging = array();
$config->setExtend('staging', 'production');
$config->production->db = array();
$config->production->db->hostname = 'localhost';
$config->production->db->username = 'production';
$config->staging->db = array();
$config->staging->db->username = 'staging';
// Escreve o arquivo de configuração em uma das seguintes formas:
// a)
$writer = new Zend_Config_Writer_Xml(array('config' => $config,
'filename' => 'config.xml'));
$writer->write();
// b)
$writer = new Zend_Config_Writer_Xml();
$writer->setConfig($config)
->setFilename('config.xml')
->write();
// c)
$writer = new Zend_Config_Writer_Xml();
$writer->write('config.xml', $config);
]]>
Isso criará um arquivo de configuração XML com as seções de produção
e de testes, onde testes estende produção.
Modificando uma Configuração Existente
Este exemplo demonstra como editar um arquivo de configuração existente.
true,
'allowModifications' => true));
// Modifica um valor
$config->production->hostname = 'foobar';
// Escreve o arquivo de configuração
$writer = new Zend_Config_Writer_Ini(array('config' => $config,
'filename' => 'config.ini'));
$writer->write();
]]>
Carregando um Arquivo de Configuração
Ao carregar um arquivo de configuração existente para modificações, é muito importante
que se carregue todas as seções e que se pule tudo o que é estendido, para que valores
não sejam fundidos. Isto é feito passando o skipExtends como opção
para o construtor.
Para todos os escritores baseados em arquivo (INI, XML
e Matriz PHP) internamente o render() é usado
para construir a string de configuração. Este método também pode ser usado externamente caso
precise acessar a string de representação dos dados de configuração.