CakePHP3で環境毎(development/production)にデータベース・設定を切り替え

スポンサーリンク

CakePHP 3 で development, production, staging などの環境ごとに、データベース接続など設定情報を切り替える方法です。情報が見つかりにくくて、ちょっと試行錯誤しました。

— 環境 —
CakePHP 3.1.1
PHP 5.5.19

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

各環境ごとの設定ファイルを作成

まず、config 以下に environments ディレクトリを作成して、環境ごとの設定ファイルを作成します。

各々環境ごとの設定ファイルに config/app.default.php をコピー&ペーストして、中身を環境に合わせて書き換えます。デバッグ情報(’debug’ => true)やエラー情報(Error)、データベースの設定情報(Datasources)の箇所などは、環境ごとに異なる情報になるかと思います。

config/bootstrap.php で設定ファイルをロードする

公式ドキュメントの説明に、独自に追加した設定ファイルを読み込む方法が書いてあります。

Loading Additional Configuration Files – Configuration | CakePHP Cookbook 3.x documentation

このように書くことで、config/other_config.php を設定ファイルとして読み込めるらしい。

上述の公式ドキュメントを参考に、development, production など環境ごとに読み込む設定ファイルを変更するために、config/bootstrap.php を以下のように変更しました。

config/bootstrap.php

これで、サーバーの HTTP_HOST の情報から、環境ごとに読み込む設定ファイルを変更することができました。

【追記 2016/02/05】
$_SERVER[‘HTTP_HOST’] で切り替える方法は、コンソール作業やマイグレーションでエラーが出てちょっとまずかったので、独自に設定した環境変数 CAKEPHP_ENV で切り替える方法に修正しました。それについての記事を書きましたので、以下リンクからご参照お願いします。

CakePHP3で環境を切り替え(development/production) | EasyRamble
【追記ここまで】

CakePHP 用の情報は、バージョン 2 と 3 の情報が錯綜しているのでなかなか探しにくい。また検索しても CakePHP 3 の情報は少なめなので、最初は公式ドキュメントを当たるの良さそうです。

今回の解決策は CakePHP3 の公式ドキュメントと、検索で見つけた CakePHP2 での解決策を混ぜてやった感じです。確信があるわけではないので、もっと良い方法があるかもしれません。フレームワーク側でデフォルトでサポートがありそうな機能ですけど、なにかスタンダードな方法はないのでしょうかね…。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
 
スポンサーリンク

Leave Your Message!