フィルター
フィルターは、コントローラー アクションの実行前または後に実行されるオブジェクトです。たとえば、アクセス制御フィルターは、アクションの実行前に、特定のエンド ユーザーにそのアクションを実行する権限があるかどうかを制御でき、コンテンツ圧縮フィルターは、アクションの実行後、エンド ユーザーに送信する前に応答コンテンツを圧縮できます。 (推奨学習: YII フレームワーク )
フィルターには、プレフィルター (アクション前のフィルター ロジック) またはポストフィルター (アクション後のフィルター ロジック) を含めることができ、あるいは 2 つを同時に含めることもできます。
フィルターの使用
フィルターは本質的に特殊なタイプの動作であるため、フィルターの使用は動作の使用と同じです。以下に示すように、コントローラー クラスの Behaviors() メソッドをオーバーライドすることでフィルターを宣言できます:
public function behaviors() { return [ [ 'class' => 'yii\filters\HttpCache', 'only' => ['index', 'view'], 'lastModified' => function ($action, $params) { $q = new \yii\db\Query(); return $q->from('user')->max('updated_at'); }, ], ]; }
コントローラー クラスのフィルターは、デフォルトでクラスのすべてのアクションに適用されます。設定できるのは属性のみです。コントローラーがどのアクションに適用されるかを指定します。上記の例では、HttpCache フィルターはインデックス アクションとビュー アクションにのみ適用されます。また、例外属性を設定して、一部のアクションがフィルターを実行しないようにすることもできます。
コントローラーに加えて、フィルターはモジュールまたはアプリケーション本体で宣言できます。宣言後、フィルターのonly属性とexcel属性が上記のように構成されていない限り、フィルターはモジュールまたはアプリケーション本体に属するすべてのコントローラーアクションに適用されます。
注: モジュールまたはアプリケーション本体でフィルターを宣言する場合は、アクション ID だけではモジュールまたはアプリケーション本体内の特定のアクションを一意に指定できないため、only 属性と else 属性でアクション ID の代わりにルートを使用します。
アクションに複数のフィルターがある場合、それらは次のルールに従って順番に実行されます:
事前フィルター処理
順序 アプリケーション本体の behaviours() にリストされているフィルターを実行します。
モジュールの Behaviors() にリストされているフィルターを順番に実行します。
behaviors() にリストされているフィルターをコントローラーで順番に実行します。
いずれかのフィルタがアクションの実行を終了すると、後続のフィルタ (プレフィルタリングとポストフィルタリングを含む) は実行されなくなります。
事前フィルタリングを正常に通過した後、アクションを実行します。
ポストフィルタリング
コントローラの Behaviors() にリストされているフィルタを逆の順序で実行します。
モジュールの Behaviors() にリストされているフィルターを逆の順序で実行します。
アプリケーション本体の Behaviors() にリストされているフィルターを逆の順序で実行します。
以上がYiiフィルターとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。