いつのまにかZF2が出てたので、今さら手元に残ってたZF1の未公開記事を大放出しちゃうシリーズ。
http://framework.zend.com/manual/ja/zend.config.writer.introduction.html
> Zend_Config_Writer は、設定ファイルに Zend_Config オブジェクトを書き出します。
config.iniとかconfig.xmlとかを勝手に作ってくれるというものです。
これ単品ではあまり使用価値はありませんが、大規模なアプリを作った際にプログラムから設定を変更したい、といったときに重宝すると思われます。
さっそく使ってみる。
config.ini
config.json
config.xml
config.yaml
config.php
Zend_Configの素材として使った配列はこちらです。
見事に設定ファイルの形式になりました。
つまりはZend_Configのちょうど正反対のことをやってくれるというわけです。
なにげにjson_encode()やsimplexml_load_string()、yaml_emit()といった統一性のない関数を使わずに、Zend_ConfigとZend_Config_Writerで統一的なフォーマット変換が行えるので、むしろそっち用途としてのほうが便利なのではなかろうか。
http://framework.zend.com/manual/ja/zend.config.writer.introduction.html
> Zend_Config_Writer は、設定ファイルに Zend_Config オブジェクトを書き出します。
config.iniとかconfig.xmlとかを勝手に作ってくれるというものです。
これ単品ではあまり使用価値はありませんが、大規模なアプリを作った際にプログラムから設定を変更したい、といったときに重宝すると思われます。
さっそく使ってみる。
<?php header('Content-type: text/html; charset=UTF-8'); require_once('Zend/Config.php'); require_once('Zend/Config/Writer/Ini.php'); require_once('Zend/Config/Writer/Json.php'); require_once('Zend/Config/Writer/Xml.php'); require_once('Zend/Config/Writer/Yaml.php'); require_once('Zend/Config/Writer/Array.php'); //適当なコンフィグを作成 $zendConfig = new Zend_Config(array(), true); //stagingはproductionを継承する $zendConfig->setExtend('staging', 'production'); //production、stagingの設定 $configProductionArray = array( 'webhost' => 'www.example.com', 'database' => array( 'adapter' => 'pdo_mysql', 'params' => array( 'host' => 'db.example.com', 'username' => 'dbuser', 'password' => 'secret', 'dbname' => 'dbname' ) ) ); $configStagingArray = array( 'database' => array( 'params' => array( 'username' => 'staging.example.com', 'password' => 'staginguser', 'dbname' => 'stagingsecret' ) ) ); $zendConfig->production = $configProductionArray; $zendConfig->staging = $configStagingArray; //config.iniに保存 $zendConfigWriterIni = new Zend_Config_Writer_Ini(array( 'filename' => 'config.ini' ,'config' => $zendConfig )); $zendConfigWriterIni->write(); //config.jsonに保存 $zendConfigWriterJson = new Zend_Config_Writer_Json(array( 'filename' => 'config.json' ,'config' => $zendConfig )); $zendConfigWriterJson->write(); //config.xmlに保存 $zendConfigWriterXml = new Zend_Config_Writer_Xml(array( 'filename' => 'config.xml' ,'config' => $zendConfig )); $zendConfigWriterXml->write(); //config.yamlに保存 $zendConfigWriterYaml = new Zend_Config_Writer_Yaml(array( 'filename' => 'config.yaml' ,'config' => $zendConfig )); $zendConfigWriterYaml->write(); //config.phpに保存 $zendConfigWriterArray = new Zend_Config_Writer_Array(array( 'filename' => 'config.php' ,'config' => $zendConfig )); $zendConfigWriterArray->write();
config.ini
[production] webhost = "www.example.com" database.adapter = "pdo_mysql" database.params.host = "db.example.com" database.params.username = "dbuser" database.params.password = "secret" database.params.dbname = "dbname" [staging : production] database.params.username = "dev.example.com" database.params.password = "devuser" database.params.dbname = "devsecret"
config.json
{ "production":{ "webhost":"www.example.com","database":{ "adapter":"pdo_mysql","params":{ "host":"db.example.com","username":"dbuser","password":"secret","dbname":"dbname" } } },"staging":{ "database":{ "params":{ "username":"dev.example.com","password":"devuser","dbname":"devsecret" } },"_extends":"production" } }
config.xml
<?xml version="1.0"?> <zend-config xmlns:zf="http://framework.zend.com/xml/zend-config-xml/1.0/"> <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 zf:extends="production"> <database> <params> <username>dev.example.com</username> <password>devuser</password> <dbname>devsecret</dbname> </params> </database> </staging> </zend-config>
config.yaml
production: webhost: www.example.com database: adapter: pdo_mysql params: host: db.example.com username: dbuser password: secret dbname: dbname staging: database: params: username: dev.example.com password: devuser dbname: devsecret _extends: production
config.php
<?php return array ( 'production' => array ( 'webhost' => 'www.example.com', 'database' => array ( 'adapter' => 'pdo_mysql', 'params' => array ( 'host' => 'db.example.com', 'username' => 'dbuser', 'password' => 'secret', 'dbname' => 'dbname', ), ), ), 'staging' => array ( 'database' => array ( 'params' => array ( 'username' => 'dev.example.com', 'password' => 'devuser', 'dbname' => 'devsecret', ), ), ), );
Zend_Configの素材として使った配列はこちらです。
見事に設定ファイルの形式になりました。
つまりはZend_Configのちょうど正反対のことをやってくれるというわけです。
なにげにjson_encode()やsimplexml_load_string()、yaml_emit()といった統一性のない関数を使わずに、Zend_ConfigとZend_Config_Writerで統一的なフォーマット変換が行えるので、むしろそっち用途としてのほうが便利なのではなかろうか。
PR