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 quatro 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_Json
Zend_Config_Writer_Xml
Zend_Config_Writer_Yaml
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,
JSON, XML, YAML e Matriz
PHP) internamente o render() é usado para
construir a string de configuração. Este método pode ser usado de forma independente para
acessar a string de representação dos dados de configuração.
Notes specific to the INI writer
The INI writer has two modes for rendering with regard to
sections. By default the top-level configuration is always written into section
names. By calling $writer->setRenderWithoutSections(); all
options are written into the global namespace of the INI file
and no sections are applied.
Zend_Config_Writer_Ini has an additional option parameter
nestSeparator, which defines with which character the
single nodes are separated. The default is a single dot, which is accepted by
Zend_Config_Ini by default.
Notes specific to the YAML writer
The YAML writer lets you optionally specify an alternate
YAML encoder to use. By default, one is shipped with the framework
that is suitable for most configuration tasks. If you find it insufficient, or wish to
use more advanced YAML, you may provide an alternate encoder callback.
The method for doing so is to use the
Zend_Config_Writer_Yaml::setYamlEncoder() method, passing it a
valid callback.
setYamlEncoder(array('sfYaml', 'dump'));
]]>
The above uses the Symfony Components' sfYaml component in order
to encode the configuration to YAML.