シェアする

  • このエントリーをはてなブックマークに追加

[CakePHP]appContorollerでModelを使う

概要

appControllerのbeforeFilter()でModelを使いたいときってありません?
例えば全ページ共通のサイドメニューにメニュー項目を呼び出すときとか。
単純にappControllerでuses指定して$this->Modelで使えると思いきやできない*[1] ですよね。

それじゃappContorollerのbeforeFilter()でモデルを使う方法をメモしておきます。

方法

まずappControllerでModelを読み込みます。
1.2からはloadModelの代わりにApp::import(“Model”, “%モデル名%”)を使います。

class AppController extends Controllerでクラスを定義する前に、

app::import("Model", "%モデル名%");
class AppController extends Controller {
// 省略
}

はい。これでモデルを読み込めました。
次はモデルのインスタンスの作成です。

まだモデルは読み込まれていないのでvar $usesは定義しても効きません*[2]
ですから、$this->%モデル名%ではモデルにアクセスできないわけですね。
では、先ほど読み込んだモデルにアクセスする方法です。
function beforeFilter()の中に

// 読み込んだモデルのインスタンスを作成
$objModel = new %モデル名%;

// 後は普通につかえます。
$data = $objModel->find("all");

こんな感じで使えるようになります。

  1. できないですよね?確か。自信がないけどbeforeFilterが呼ばれるのがModelを読み込む前だから取得できないんだと記憶してるけど…違ったかな? []
  2. 多分 []

シェアする

  • このエントリーをはてなブックマークに追加

フォローする