LoginSignup
17
19

More than 5 years have passed since last update.

CakePHP 環境別設定ファイルの切り替えについて

Last updated at Posted at 2015-03-18

はじめに

bootstrap.phpにドメインによって設定を切り替わる処理を記載していたのですが、
リリース事故が起きそうな気がしたので、色々試してみて、下記をアレンジした方法に落ち着きました。

参照:CakePHPで開発環境と本番環境の切り替え
app/Config/Env/以下に環境判別用のファイルを作成して、読み込む設定ファイルを切り替えます。
(開発環境は設定しなくてOK!)

組んでみる

下記のファイルを作成
・環境確認用:app/Config/Env/[CAKE_ENV] (空ファイルでOK)
・環境別設定ファイル:app/Config/[CAKE_ENV]/envConfig.php
・環境別DBファイル:app/Config/[CAKE_ENV]/database.php(app/Config/database.php.defaultのフォーマットでOK)

app/Config/bootstrap.php
<?php
require_once(APP . DS . 'Lib' . DS . 'Env.php');
Env::loadEnv();
Env::loadConfig();
app/Config/database.php
<?php
require_once Configure::read('CAKE_ENV') . DS . basename(__FILE__);
app/Lib/Env.php
<?php
Class Env {
    const DEV = 'Development';
    const STG = 'Staging';
    const PRO = 'Production';

    // デフォルト開発環境
    static function loadEnv() {
        $envList = array(self::PRO, self::STG, self::DEV);
        foreach ($envList as $env) {
            if (is_file(APP . 'Config' . DS . 'Env' . DS . $env)) {
                break;
            }
        }
        Configure::write('CAKE_ENV', $env);
    }

    static function loadConfig() {
        $envPath = APP . 'Config' . DS . Configure::read('CAKE_ENV') . DS . 'envConfig.php';
        if (is_file($envPath)) {
            include_once $envPath;
        }
        else {
            echo 'file is not found ' . $envPath;
            exit;
        }
    }
}

最後に

app/Config/Envをコミットしなければ、設定ファイル切り替えによる事故はない!(はず)
開発環境ではapp/Config/Envを設定しなくても良いので、コミットしてしまうこともなさそうです。

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19