Yii1.1でCInlineFilterを使ってControllerにフィルター処理を実装する
はじめに
WebアプリケーションのMVCフレームワークだと、各コントローラーのアクションの実行前後で、共通処理を行う場面がよくある。
この場合は下記のように、フレームワーク側で専用のライフサイクルメソッドが提供されていることが多いだろう。
- beforeAction
- afterRender
Yiiの場合も上記のようなメソッドは存在しますが、
それとは別に、フィルターという機能で、フィルタリンング処理を行う事が可能だ。
今回はControllerクラスでフィルターの機能の実装例を紹介する。
Yiiとフィルター
その前にどのような仕組みでこのフィルター機能が各コントローラーのアクションの前後で実行されているかを説明する。
Yii1.1.にはCFilter クラスとがあり、このクラスを継承したサブクラスとして、以下が提供されている。
これらのクラスは各コントローラーのfiltersメソッドで指定する。
指定されたフィルタークラスはCFilterChainクラスでスタックされ、各コントローラーのアクションの前後で順次実行される。
今回はこの中から、CInlineFilterを利用してコントローラークラスにフィルターを実装した例を下記にコード付きで解説する。
実装例
対象のControllerクラスで以下のように実装する。
以下はアカウントチェック処理をフィルターで実装した例である。
class TopController extends CController
{
public function filters()
{
return ['CheckAccount']; // (1)
}
// (2)
public function filterCheckAccount(CFilterChain $filterChain)
{
// @ToDo アカウントチェック処理のフィルター処理を実行
$filterChain->run(); // (3)
}
}
ポイントは以下の3点である。
(1) 対象のControllerクラスのfiltersメソッドにフィルター名を定義
(2) filter + (1)で追加したフィルター名
のメソッドを定義し、フィルター処理を実装
(3) (2)で実装したメソッドの引数でCFilterChain::runを実行する
Controllerクラスのfiltersメソッドでは以下のように+/-を使用して、フィルターを適用/除外の指定も可能だ。
以下はcreate/editアクションのみにフィルターを適用する場合の実装例である。
class TopController extends CController
{
public function filters()
{
return ['CheckAccount + create, edit'];
}
...
public function actionIndex()
{
}
public function actionCreate()
{
}
public function actionEdit()
{
}
}
参考
Author And Source
この問題について(Yii1.1でCInlineFilterを使ってControllerにフィルター処理を実装する), 我々は、より多くの情報をここで見つけました https://qiita.com/SRAUFactory/items/08f198d4b4b4bc9e7f6f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .