[cakePHP] Configure::read, write の使い方/ No variable $config found
google OAuth2.0 を利用する際に clientId, clientSecret を定数化して任意の場所から呼び出したかった.
Configureの使い方を忘れてしまったのでメモ.
参考
動作環境
- CakePHP 2.8.5
前提条件
今回は google認証の利用を目的としているが, cakePHPの Configure 使用方法は使用するライブラリに依存しない.
必要な箇所は適宜読み替えて欲しい.
google OAuth2.0 についてはGoogle Identity Platform | 公式ドキュメントを参照.
どんないいことがあるのか
/app/Config/
に使用したい定数を定義しておけばプロジェクト内のどこからでも呼び出すことができる.
定数は一箇所で集中管理した方がディレクトリ構成がスッキリする.
このあたりについてはドキュメントに詳しく書いてある.
CakePHP の Configure クラスは、アプリケーションや実行時固有の値を保存したり取り出したりするのに使います。
注意していただきたいのですが、 このクラスは、その中にいかなるものでも格納することができ、 さらにあなたの コードのいかなる箇所でもそれらを使うことができてしまいます。
使い方
定義ファイル作成
/app/Config/
に定義したいファイルを作成する.
今回は google.php
とする.
// /app/Config/google.php
<?php
Configure::write('Google.clientId', 'クライアントID');
Configure::write('Google.clientSecret', 'クライアンシークレット');
それぞれの値は API Managerの認証情報であらかじめ取得する必要がある.
/app/Config/bootstrap.php に1行追加
先程作成したファイル名を引数に指定
Configure::load("google");
Configure::read()
で呼び出し
先程の設定値を呼び出してみる.
...しかし, 次の記述だとエラーが出る.
$ echo Configure::read('Google.clientId');
$ echo Configure::read('Google.clientSecret');
エラー内容
No variable $config found in /vagrant/app/Config/google.php
No variable $config found in xxx
結論から書くと, $config
が定義されるように記述しなければならない.
私は次のように回避したが, cakePHP開発者の意図とは異なる解決方法かも.
$config = array();
Configure::write('Google.clientId', 'クライアントID');
Configure::write('Google.clientSecret', 'クライアンシークレット');
$config
を定義しなければならない理由
$config
を定義してね. じゃないとエラー出すよ.
とドキュメントに書いてある.
class PhpReader Allows you to read configuration files that are stored as plain PHP files. You can read either files from your app/Config or from plugin configs directories by using plugin syntax. Files must contain a $config variable. An example configuration file would look like:
$config = array( 'debug' => 0, 'Security' => array( 'salt' => 'its-secret' ), 'Exception' => array( 'handler' => 'ErrorHandler::handleException', 'renderer' => 'ExceptionRenderer', 'log' => true ) );
Files without $config will cause an ConfigureException
改めて呼び出すとちゃんと機能している.
$ echo Configure::read('Google.clientId'); #クライアントID
$ echo Configure::read('Google.clientSecret'); #クライアンシークレット
今回は以上.