CakePHPでControllerとModelをセットで作らない方法

こんにちは!ぐちです。

ControllerとModelの関係性

CakePHPをはじめとするフレームワークでは命名規則があり規則に沿った名前をクラスにつけておくと自動でインポートが行われます。

例えばModelクラスとControllerクラスではプリフィックスを同じ名前にしておくことでController内で該当するModelクラスを使うことができます。

$TblUserController = new TblIUserController;
$TblUserController->TblUser->getUsers();

上記のようにTblUserというモデルを使うためにはTblUserControllerというコントローラクラスを作成してオブジェクトを作れば使うことができます。これがCakePHPの標準かどうかはわかりませんがモデルを使いたいだけのためにコントローラを作成するとコントローラ内は空の状態でファイルだけが増えていきますよね?

app/Controller/
 TblUserController

app/Model/
 TblUser

Controllerを作成しない

Controller内で実際の処理(リクエストに対応するロジック)が不要なものをいくつも作成するのは無駄ですよね。ファイルだけが増えて管理もしにくくなりますし定義する意味すらないものですので。。。

そんな時にModelだけ定義して必要なController内で使えるようにする方法が下記の定義です。

class IndexController extends AppController {
    public $uses = array(’TblUser’); // 配列でModelのクラス名を定義する
    public function index() {
        $this->TblUser->getUsers(); // $thisでModelクラスを参照してメソッドを呼び出す
    }
}

IndexControllerは実際にブラウザなどからリクエストされた処理を行うコントローラでTblUserControllerを定義せずにModelで使うことができます。

こうしておくことで不要なコントローラクラスを定義しないで済みますしファイルも減り管理もしやすくなります。やっぱり見やすくて人に優しいコードを書く意識をしないといけませんよね!