忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/04/18 22:17 |
ZF1.11: Zend_Config_Writer
いつのまにかZF2が出てたので、今さら手元に残ってたZF1の未公開記事を大放出しちゃうシリーズ。

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


2012/09/21 22:55 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Minecraft1.3.2 Crossbow Mod2 Version4 その3 アタッチメント | HOME | Minecraft1.2.5 エンチャント交換MOD 1.0.4 その2 エンチャントを作成>>
忍者ブログ[PR]