Configureの便利さは危ない…?

この記事はだいぶ前に書かれたものなので情報が古いかもしれません

CakePHPには、Configure::write()やConfigure::read()という関数があります。

僕が一番よく使うのは、デバッグログを出したり消したりするところですかね。

Configure::write('debug', 0);

ローカルで開発したプロジェクトを本番環境に上げるときなんかは普通、こうやってデバッグを出力しないように設定しますよね。

あとはまあ、app/configフォルダの中に適当なファイルを作って、そこに書いた定数などを呼び出すときに使ったりするでしょうか。たとえばconfigフォルダの中にmessages.phpというファイルを作って、その中にコントローラーやモデルのどこでも使う機会があるような配列何かを書いたりして、それを呼び出すときに使います。

//messages.php
$config['select'] = array('1' => 'yes', '2' => 'no');

//bootstrap.php
Configure::load('messages');

//適当なビューファイル
echo $form->select('reply', Configure::read('select'));

すごい端折った書き方ですが、こんな書き方をすれば、yesとnoのセレクトボックスが出力できます。このConfigure::read(‘select’)はコントローラーやモデルでも呼べるので、いつでも好きなところでこの配列を使うことができるってなわけですね。

で、このConfigureですが、何だろ……イメージとしてはセッションに近いものがあるので、適当な定数にいろんな値を持たせておくこともできるわけですね。

例えば、例えばというか、これは実際に僕も試みたことがあるものなんですけど、CakePHPにAuthコンポーネントがありますよね。これはコンポーネントなので、基本的にはコントローラーで使用するものなのですが、こいつをモデルでも使えたらいいな~と思って、思考錯誤しているうちにConfigureに辿り着きました。

//コントローラー
Configure::write('Auth', $this->Auth);

//モデル
$auth = Configure::read('Auth');

こうやると、モデルでAuthの中身が使えるようになるんです。こいつは便利ですね。Configureを使えば何でも渡せるじゃん。


でも注意です。本来コントローラーで使うべきものを全てモデルに持ってってモデルで処理しようとすることは、MVCモデルの流儀に反すると言いますか……MVCモデルであることの意味みたいなものが、薄れてしまいます。

CookBookにも書いてあります。

このクラスの中には何でも保存でき、コード内のあらゆる場所で使用できるので、CakePHPのMVCパターンを崩してしまう誘惑には注意しましょう。 Configureクラスの主要な目標は、各変数を集中保管して、各オブジェクトから使用できるようにすることです。“設定より規約” (convention over configuration)を遵守するようにして、MVC構造を壊してしまうことがないようにしましょう。

だってさ。まさに今の俺じゃん。完全に誘惑に負けてるっさ。


ま、たま~にやるくらいなら怒られないですよね。たま~~になら……。

匿名 2013年03月13日 11:57:57
ありがとう……(・ω・)
まっち~(管理人) 2013年03月13日 13:08:24
>匿名さん
記事の内容がお役に立てましたでしょうか。
お役に立てたのならこれ幸いです。
Configure::write | Web memo 2013年05月07日 11:40:28
[...] http://wadap.hatenablog.com/entry/20100120/1263954700 http://norm-nois.com/blog/archives/329 [...]
もしかしたら何か関連しているかも?