Yiiフィルターとは何ですか

(*-*)浩
リリース: 2019-12-27 14:49:58
オリジナル
2354 人が閲覧しました

Yiiフィルターとは何ですか

フィルター

フィルターは、コントローラー アクションの実行前または後に実行されるオブジェクトです。たとえば、アクセス制御フィルターは、アクションの実行前に、特定のエンド ユーザーにそのアクションを実行する権限があるかどうかを制御でき、コンテンツ圧縮フィルターは、アクションの実行後、エンド ユーザーに送信する前に応答コンテンツを圧縮できます。 (推奨学習: 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 サイトの他の関連記事を参照してください。

関連ラベル:
yii
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート