12月
04
2008

[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. 多分 []

▼Advertisement

【Webサービスを作ろう!好評連載中!】このエントリーをはてなブックマークに追加 はてなブックマーク -
⇒ #1 挫折しないウェブサービス開発のための4つの心構え
Webサービス、Webアプリケーション開発に興味のある方は必見です!

【2月のイチオシ記事】このエントリーをはてなブックマークに追加 はてなブックマーク -
⇒ 社長になった私がお金にならないデータベースサイトを作った7つの理由

Written by suzuki in: 記事 | タグ: ,

コメントはまだありません »

RSS feed for comments on this post.  トラックバックURL


コメントをのこす

| I have been indebted to Aeros Theme. |