いつのまにか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