CakePHP3におけるbeforeFilter()メソッドの使い方について解説していきたいと思います。
目次
beforeFilter()の役割
beforeFilter()は、コントローラーのクラス内で使われるコールバック関数です。CakePHPでは、一つのクラス内に複数のアクション(=メソッド)を記述することで様々な機能を実現しますが、すべてのアクションに共通した処理を実装したいという場合があります。
例えばユーザーの認証やセキュリティ操作などは、すべてのアクションで利用したいと思うことがあるでしょう。そのような場合に便利なのがbeforeFilter()メソッドです。このメソッドをクラス内に記述すると、任意のアクションを呼び出そうとしたときに、最初に実行することができます(実はアクションが無くても実行されます)。
beforeFilter()の使い方
使い方は非常に簡単です。他のアクションと同様に、クラスの中の1メソッドどして書き込みます。
<?php class TestController extends AppController { parent::beforeFilter(); //AppControllerにbeforeFilter()が記載されている場合は実行する public function beforeFilter() { //認証やセキュリティの処理など } public function hoge() { //hogeアクションの中身 } }
ここで4行目に注目してください。CakePHPではAppControllerを継承した個別のコントローラーを作成していきます。そのため、AppControllerにbeforeFilter()がある場合、それを実行する前に、parent(つまりAppController)のbeforeFilter()を読み込む必要があります。
beforeFilterを利用する場合は、CSRF制御やセキュリティコンポーネントの制御を行うことが多いです。
参考
CakePHP公式ドキュメント「コントローラー」