忍者ブログ
[PR]
×

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



2024/11/22 22:33 |
ZF1.11 Zend_Config

設定ファイルでdefine()を並べる、ってのはよく見かける風景ですが、あれは少しでもPHPの知識がないとよくわかりません。
ということで簡単にiniやXML形式で設定を書けるようにできるのがZend_Configです。

> 現時点で Zend_Config が提供している設定データアダプタは Zend_Config_Ini と Zend_Config_Xml の二種類
http://framework.zend.com/manual/ja/zend.config.introduction.html
とか書かれていますが、実はしれっとYAML、JSON、そしてPHPの配列に対応しておりヘルプも書かれています。
http://framework.zend.com/manual/ja/zend.config.html
サンプルは何故かそれぞれのサンプルがバラバラな形になっているのですが、とりあえずZend_Config_Iniと形式を揃えて使ってみます。

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.host     = dev.example.com
database.params.username = devuser
database.params.password = devsecret

config.json
{
  "production":{
    "webhost": "www.example.com",
    "database":{
      "adapter": "pdo_mysql",
      "params":{
        "host": "db.example.com",
        "username": "dbuser",
        "password": "secret",
        "dbname": "dbname"
      }
    }
  },
  "staging":{
    "_extends": "production",
    "database":{
      "params":{
        "host": "dev.example.com",
        "username": "devuser",
        "password": "devsecret"
      }
    }
  }
}

config.xml
<?xml version="1.0"?>
<configdata>
  <production>
    <webhost value="www.example.com" />
    <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>

config.yaml
production:
  webhost: www.example.com
    database:
      adapter: pdo_mysql
      params:
        host: db.example.com
        username: dbuser
        password: secret
        dbname: dbname
staging:
  _extends: production
    database:
      params:
        host: dev.example.com
        username: devuser
        password: devsecret

config.php
<?php
  $arr_production = array(
    'webhost'  => 'www.example.com',
    'database' => array(
      'adapter' => 'pdo_mysql',
      'params'  => array(
          'host'     => 'db.example.com',
          'username' => 'dbuser',
          'password' => 'secret',
          'dbname'   => 'mydatabase'
      )
    )
  );
  $arr_staging = array(
    'webhost'  => 'www.example.com',
    'database' => array(
      'adapter' => 'pdo_mysql',
      'params'  => array(
          'host'     => 'dev.example.com',
          'username' => 'devuser',
          'password' => 'devsecret',
          'dbname'   => 'mydatabase'
      )
    )
  );
  return _IS_PRODUCTION ? $arr_production : $arr_staging;


index.php
<?php

	//Zend_Config
		require_once('Zend/Config.php');
		require_once('Zend/Config/Ini.php');
		require_once('Zend/Config/Json.php');
		require_once('Zend/Config/Xml.php');
		require_once('Zend/Config/Yaml.php');
	
	//Zend_Config_Ini
		$config_ini = new Zend_Config_Ini('config.ini', 'staging');
	
	//Zend_Config_Json
		$config_json = new Zend_Config_Json('config.json', 'staging');
	
	//Zend_Config_Xml
		$config_xml = new Zend_Config_Xml('config.xml', 'staging');
	
	//Zend_Config_Yaml
		$config_yaml = new Zend_Config_Yaml('config.yaml', 'staging');
	
	//Zend_Config
		define('_IS_PRODUCTION', true);
		$config_php = new Zend_Config(require_once('config.php'));

簡易さではiniとYAMLが飛び抜けてますね。

実は$config = new Zend_Config('config.ini', 'staging', Zend_Config::INI)とかできません。
Zend/Config.phpではなく、Zend/Config/Ini.phpなど使用形式に対応したアダプタを直接インクルードしないといけません。
これ、ヘルプの何処にも書かれてないんですが。

上記で取得したZend_Configインスタンスはどれも、
Zend_Db::factory($config->database);
というふうに同じ使い方が可能です。
またCountableおよびIteratorインターフェイスを実装しているのでcount()やforeachも使えます。
好きな形式でコンフィグを書くとよいでしょう。

PHPだけ設定の継承をしておらず、プロダクションかステージングかを引数に渡すこともできず残念なことになっています。
PHPの配列による設定はあくまでおまけのようなものです。
つうかPHPで書くんだったらZend_Config使う意味ねえよ。
 

 

PR


2011/02/07 23:33 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






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



<<今週の実績 2011/02/13 | HOME | 買ったものリスト 2011/02/06>>
忍者ブログ[PR]