Zend_Config_Xml
permite aos desenvolvedores armazenarem os dados de
configuração em um formato XML simples e lê-los através de uma sintaxe
de propriedade de objeto aninhado. O nome do elemento raiz do arquivo ou string
XML é irrelevante e pode ser escolhido. O primeiro nível dos elementos
XML corresponde às seções de dados de configuração. O formato
XML suporta organização hierárquica para o aninhamento dos elementos
XML abaixo dos elementos de seção-nível. O conteúdo de uma folha de
elemento XML (leaf) corresponde ao valor de um dado de configuração.
Herança de seção é suportada por um atributo XML especial chamado
extends, e o valor deste atributo corresponde à seção a que a
informação deve ser herdada.
Tipo de Retorno
Os dados de configuração lidos em Zend_Config_Xml
são sempre
retornados como strings. A conversão de dados de strings para outros tipos é deixado
para os desenvolvedores de acordo com suas necessidades específicas.
Exemplo 121. Usando o Zend_Config_Xml
Este exemplo ilustra uma utilização básica de Zend_Config_Xml
para carregar dados de configuração de um arquivo XML. Neste
exemplo, existem dados de configuração, tanto para um sistema de produção como para um
sistema de testes. Pois os dados de configuração de um sistema de testes são muito
semelhantes aos de produção, a seção de testes herda da seção de produção. Neste caso,
a decisão é arbitrária e poderia ter sido escrita de modo inverso, com a seção de
produção herdando da seção de testes, embora isso possa não ser o caso em situações
mais complexas. Suponha-se, então, que os dados de configuração a seguir estão
contidos em /path/to/config.xml
:
<?xml version="1.0"?> <configdata> <production> <webhost>www.example.com</webhost> <database> <adapter>pdo_mysql</adapter> <params> <host>db.example.com</host> <username>dbuser</username> <password>secret</password> <dbname>dbname</dbname> </params> </database> </production> <staging extends="production"> <database> <params> <host>dev.example.com</host> <username>devuser</username> <password>devsecret</password> </params> </database> </staging> </configdata>
Em seguida, suponha que o desenvolvedor do aplicativo necessite dos dados de configuração de testes do arquivo XML. É o simples caso de carregar esses dados especificando o arquivo XML e a seção de testes:
$config = new Zend_Config_Xml('/path/to/config.xml', 'staging'); echo $config->database->params->host; // prints "dev.example.com" echo $config->database->params->dbname; // prints "dbname"
Exemplo 122. Usando os Atributos de Tag no Zend_Config_Xml
Zend_Config_Xml
também suporta outras duas maneiras para definir
os nós na configuração. Ambas fazem uso de atributos. A partir do momento que os
atributos extends e value são palavras-chaves
reservadas (o último através segunda maneira de uso dos atributos), eles não poderão
ser utilizados. A primeira maneira usar os atributos é adicionar um nó pai, assim eles
serão interpretados como um filho deste nó:
<?xml version="1.0"?> <configdata> <production webhost="www.example.com"> <database adapter="pdo_mysql"> <params host="db.example.com" username="dbuser" password="secret" dbname="dbname"/> </database> </production> <staging extends="production"> <database> <params host="dev.example.com" username="devuser" password="devsecret"/> </database> </staging> </configdata>
A outra maneira não encurta realmente a configuração, mas a torna mais fácil para manter, pois você não tem que escrever o nome da tag duas vezes. Você simplesmente cria uma tag vazia com o valor no atributo value:
<?xml version="1.0"?> <configdata> <production> <webhost>www.example.com</webhost> <database> <adapter value="pdo_mysql"/> <params> <host value="db.example.com"/> <username value="dbuser"/> <password value="secret"/> <dbname value="dbname"/> </params> </database> </production> <staging extends="production"> <database> <params> <host value="dev.example.com"/> <username value="devuser"/> <password value="devsecret"/> </params> </database> </staging> </configdata>
Strings XML
Zend_Config_Xml
é capaz de carregar uma string
XML diretamente, por exemplo, uma que foi recuperada de um banco de
dados. A string é passada como primeiro parâmetro para o construtor e deve começar com
os caracteres '<?xml':
$string = <<<EOT <?xml version="1.0"?> <config> <production> <db> <adapter value="pdo_mysql"/> <params> <host value="db.example.com"/> </params> </db> </production> <staging extends="production"> <db> <params> <host value="dev.example.com"/> </params> </db> </staging> </config> EOT; $config = new Zend_Config_Xml($string, 'staging');
Namespace XML do Zend_Config
Zend_Config
vem com sua próprio namespace XML,
que adiciona funcionalidade adicional ao processo de análise. Para aproveitá-la, você
tem que definir um namespace com o namespace URI
http://framework.zend.com/xml/zend-config-xml/1.0/
em seu nó raiz
de configuração.
Com o namespace habilitado, você pode usar constantes do PHP dentro
de arquivos de configuração. Além disso, o atributo extends foi
transferido para um novo namespace e está depreciado no namespace
NULL
. Ele será completamente removido no Zend Framework 2.0.
$string = <<<EOT <?xml version="1.0"?> <config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/"> <production> <includePath> <zf:const zf:name="APPLICATION_PATH"/>/library</includePath> <db> <adapter value="pdo_mysql"/> <params> <host value="db.example.com"/> </params> </db> </production> <staging zf:extends="production"> <db> <params> <host value="dev.example.com"/> </params> </db> </staging> </config> EOT; define('APPLICATION_PATH', dirname(__FILE__)); $config = new Zend_Config_Xml($string, 'staging'); echo $config->includePath; // Prints "/var/www/something/library"