概要
appControllerのbeforeFilter()でModelを使いたいときってありません?
例えば全ページ共通のサイドメニューにメニュー項目を呼び出すときとか。
単純にappControllerでuses指定して$this->Modelで使えると思いきやできない* ((できないですよね?確か。自信がないけどbeforeFilterが呼ばれるのがModelを読み込む前だから取得できないんだと記憶してるけど…違ったかな?)) ですよね。
それじゃappContorollerのbeforeFilter()でモデルを使う方法をメモしておきます。
方法
まずappControllerでModelを読み込みます。
1.2からはloadModelの代わりにApp::import(“Model”, “%モデル名%”)を使います。
class AppController extends Controllerでクラスを定義する前に、
app::import("Model", "%モデル名%");
class AppController extends Controller {
// 省略
}
はい。これでモデルを読み込めました。
次はモデルのインスタンスの作成です。
まだモデルは読み込まれていないのでvar $usesは定義しても効きません* ((多分)) 。
ですから、$this->%モデル名%ではモデルにアクセスできないわけですね。
では、先ほど読み込んだモデルにアクセスする方法です。
function beforeFilter()の中に
// 読み込んだモデルのインスタンスを作成
$objModel = new %モデル名%;
// 後は普通につかえます。
$data = $objModel->find("all");
こんな感じで使えるようになります。

