过滤器
过滤器是控制器动作执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。 (推荐学习:yii框架)
过滤器可包含预过滤(过滤逻辑在动作之前)或后过滤(过滤逻辑在动作之后), 也可同时包含两者。
使用过滤器
过滤器本质上是一类特殊的 行为, 所以使用过滤器和 使用行为一样。 可以在控制器类中覆盖它的 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'); }, ], ]; }
控制器类的过滤器默认应用到该类的 所有 动作, 你可以配置 only 属性明确指定控制器应用到哪些动作。 在上述例子中,HttpCache 过滤器只应用到 index 和 view 动作。 也可以配置 except 属性 使一些动作不执行过滤器。
除了控制器外,可在 模块或应用主体 中申明过滤器。 申明之后,过滤器会应用到所属该模块或应用主体的 所有 控制器动作, 除非像上述一样配置过滤器的 only 和 except 属性。
注意: 在模块或应用主体中申明过滤器,在only 和 except 属性中使用路由 代替动作 ID, 因为在模块或应用主体中只用动作ID并不能唯一指定到具体动作。
当一个动作有多个过滤器时,根据以下规则先后执行:
预过滤
按顺序执行应用主体中 behaviors() 列出的过滤器。
按顺序执行模块中 behaviors() 列出的过滤器。
按顺序执行控制器中 behaviors() 列出的过滤器。
如果任意过滤器终止动作执行, 后面的过滤器(包括预过滤和后过滤)不再执行。
成功通过预过滤后执行动作。
后过滤
倒序执行控制器中 behaviors() 列出的过滤器。
倒序执行模块中 behaviors() 列出的过滤器。
倒序执行应用主体中 behaviors() 列出的过滤器。
以上是yii过滤器是什么的详细内容。更多信息请关注PHP中文网其他相关文章!