PHP
CakePHP

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

More than 3 years have passed since last update.


はじめに

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を設定しなくても良いので、コミットしてしまうこともなさそうです。