概要
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");
こんな感じで使えるようになります。