CakePHP で特定の処理を全てのページで毎回実行させる方法

beforeFilter() っていうのを使うと良いそうです。
共通部分があるならbeforeFilter|ASTRODEO

AppController の中で以下のように書くと良いみたいですね。

1
2
3
4
5
6
<?php
class AppController extends Controller {
   function beforeFilter() {
      $this->set('bar', 'test');
   }
}

AppController は全てのコントローラに継承されているので、基本的にこの処理はどのページでも実行されます。
ただし、他のコントローラー、AppController を継承している子クラスで beforeFilter() を使ってしまうと、親である AppController の beforeFilter() が実行されなくなります。その際には、parent::beforeFilter() を書かなければいけないそうですよー。

1
2
3
4
5
6
7
8
<?php
class HomeController extends AppController {
   var $name = 'Home';
   function beforeFilter() {
      parent::beforeFilter()
      $this->set('foo', 'test2');
   }
}

あまり頻繁に使うことはなさそうですが、かなり重要なところなので抑えておきたいところですね。

コメント

コメントは受け付けていません。