2014年8月19日

CakePHPで設定を簡単に切り替える方法の提案

 システム開発をしている時に開発環境やテスト環境によってデータベースの接続先やログイン名が違うのが普通です。

 環境毎の設定ファイルを持つことで対応することも可能ですが、現在の実行環境の設定を変えることで簡単に設定を変更することができるようになったらいいと思いませんか?
 さらには、同じ設定は書かずに継承して使いたいですよね。

CakePHPで持っているConfigには、database.php、email.phpがあります。
database.phpを例に説明します。

以下のようにdevelop(開発環境)、test(テスト環境)、staging(ステージング環境)、production(本番環境)などのように、複数の設定を書いておきます。
各設定は、$defalutと違う部分のみ設定を入れておきます。
例では、開発環境のデータベースの接続先が違うので'host'の設定を入れてあります。

どこで設定をコントロールするかというと、Configureで設定された「environment」を読み込むことでDBの接続先を切り替えます。
enrivonmentは、bootostrap.phpの先頭(わかりやすいとこ)に書くことでそこだけ変更すれば、実行環境の設定を簡単に切り替えることができます。
実行環境がたくさんある場合は、設定を追加して__constructメソッド内で追加した設定を追加することで対応できると思います。

bootstrap.phpファイルの書き方の例
/**
* 
* Choose environment
* 
* production : 本番環境
* staging    : 準本番環境
* test       : テスト環境
* develop    : 開発環境
* 
*/
Configure::write('environment', 'develop');

database.phpの書き方の例
class DATABASE_CONFIG {
 // デフォルト設定
 public $default = array(
  'datasource' => 'Database/Mysql',
  'persistent' => false,
  'host' => 'db-server',
  'login' => 'DBのログイン名',
  'password' => 'DBのログインのパスワード',
  'database' => 'データベース名',
  'prefix' => '',
  'encoding' => 'utf8',
 );

 // 本番環境
 public $production = array(
 );

 // ステージング環境
 public $staging = array(
 );

 // テスト環境
 public $test = array(
 );

 // 開発環境
 public $develop = array(
  'host' => 'localhost',
 );

 public function __construct() {

  $environment = Configure::read("environment");

  $this->develop = $this->develop + $this->default;
  $this->test = $this->test + $this->default;
  $this->staging = $this->staging + $this->default;
  $this->production = $this->production + $this->default;

  if(!empty($this->{$environment})) {
   $this->default = $this->{$environment};
  }

 }
}

これで、違う環境で動かして、動かねーとか言ってんじゃねーよとかいって叱られなくて住みますよね。

0 件のコメント:

コメントを投稿