AppController.php内でのモデル利用
以前、AppController内で特定のmodelにアクセスという記事をエントリーした。その記事の中では、
ClassRegistry::init
を利用したモデルアクセスを中心にノウハウを書いてみた。
Cakephpのコントローラレベルにおける共通処理は、AppControllerに記述するのが一般的で、その中でモデルを利用するためには明示的にモデルの読み込み処理を行わなければいけない。その際に活用できるのが、ClassRegistry::initというcakephpの機能になる。
Cakephpバージョン2.3と2.4でのモデルアクセスは?
現在におけるcakephpのバージョンは2.4系である。最新のcakephpを活用していて、AppController内でのモデル接続に、ClassRegistry::initを活用していないことに気付いたので再度共通処理におけるモデルアクセスについてエントリーしておこうと思った。最新のcakephpでは、AppControllerでのモデルアクセスに、
$this->loadModel('Category');
を利用している。
これは、Categoryモデルに明示的に接続する例である。もっと広範囲な記述をすると以下のようになる。
class AppController extends Controller { public function beforeFilter(){ $this->loadModel('Category'); $category_tree = $this->Category->find('threaded'); } }
Categoryモデルが利用可能になったので、上のようにしてモデルに対してfindを行うことが可能になりデータを取得することができる。
$this->loadModelは2.3系と2.4系のAppController内でよく利用しているが、それぞれのバージョンでClassRegistry::initを利用してモデルにアクセスすることも可能です。