モデルを使わないコントローラ再考
$usesにばしばし追加してください。逆にモデルを使いたくない場合は
class PostController extends AppController{
cakePHP モデルなしのコントローラーって作れないの? - WEBぷろぐらま〜 システム開発エトセトラ
public $uses = null;
・・・えっ 空配列じゃないの? Σ(´酈`lll)
「column DBテーブルを使わない場合にも使えますか?」(「CakePHP ガイドブック」(マイコミ), 141P, 初版第一刷)
CakePHPは、DBテーブルを使わない場合でも問題なく使用できます。
...
2. コントローラー内で設定する場合
コントローラーに、var $uses = array(); と書くと、このコントローラーはモデルを読み込まなくなりますので、モデルファイル自体を作成する必要がなくなります。
...
で、気になってソースをあさってみました。以前自分が遭遇したのは、$usesをデフォルトのfalseのままにした結果「Missing Model」エラーが表示された現象です。そこを手がかりにGrepしてみると、(あ、例によりバージョンは1.1.19です)
cake/libs/error.php:
<?php ... /** * Renders the Missing Model class web page. * * @param unknown_type $params */ function missingModel($params) { ...
というのが見つかりました。この中で実際に"Missing Model"という文字列を設定してエラー画面をレンダリングしているようです。ということはこの関数を呼んでいる場所は・・・ということでcontroller.phpをgrep。
二カ所見つかりました。一カ所は$usesが真の時に、何段かif文がネストした先で呼ばれています。今回は$usesがfalseかnullかでどう変わるかなので、ここはスルーして良いでしょう。もう一カ所がビンゴです。
cake/libs/controller/controller.php:
<?php ... if (class_exists($this->modelClass) && ($this->uses === false)) { ... return true; } elseif ($this->uses === false) { return $this->cakeError('missingModel', array(array('className' => $this->modelClass, 'webroot' => '', 'base' => $this->base))); }
うーん、ここですね。で、なんでfalseだとMissingModelになってnullだとならないかも分かりました。三重等号で比較しているため、型チェックが発生しているからですね。
以上。