在Yii2的几乎每个controller中,我们都会看到一个函数behaviors(),通常,我们用这个函数来配置控制器的权限,例如:
public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),//过滤器
                'rules' => [
                    [
                        'actions' => ['login', 'error','index'],
                        'allow' => true,
                    ],
                    [
                        'actions' => ['logout'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'verbs' => [
                'class' => VerbFilter::className(),//过滤器
                'actions' => [
                    'logout' => ['post'],
                ],
            ],
        ];
    }
注意代码中加亮的两行,这里调用的类,我们都称之为过滤器。在controller中调用过滤器,可以控制当前controller中的所有action,我们也可以在模块(module)或是应用主体中调用,来控制整个模块或是整个应用。

Yii2提供了如下过滤器:

AccessControl
        ContentNegotiator
        Cors
        HttpCache
        PageCache
        RateLimiter
        AuthMethod

模仿这些过滤器,我们也可以开发自己的过滤器。

还是把测试的过滤器放到frontend/libs里,新建文件frontend/libs/TestFilter.php
<?php
namespace frontend\libs;
use Yii;
use yii\base\Action;
use yii\base\ActionFilter;
class TestFilter extends ActionFilter
{
    //在action之前运行,可用来过滤输入
    public function beforeAction($action) {
        echo '在调用action前显示<br/>';
        return TRUE;//如果返回值为false,则action不会运行
    }
    //在action之后运行,可用来过滤输出
    public function afterAction($action, $result) {
        return $result.'在调用action后显示<br/>';//可以对action输出的$result进行过滤,retun的内容会直接显示
    }
}
然后新建 文件frontend/controller/TestController.php
<?php
namespace frontend\controllers;
use yii\web\controller;
class TestController extends Controller {
    public function behaviors() {
        return [
            'test' => [
                'class' => 'frontend\libs\TestFilter'//调用过滤器
            ]
        ];
    }
    public function actionFilter() {
        return '当前action显示<br/>';//返回的内容会递交给过滤器,由afterAction进行处理
    }
}
最后,测试显示结果为:
在调用action前显示
当前action显示
在调用action后显示
过滤器完成。

最新文章

  1. 【Junit 报错】Test class should have exactly one public zero-argument constructor和Test class can only have one constructor
  2. 支持向量机 (SVM)分类器原理分析与基本应用
  3. eclipse导入项目前面有感叹号
  4. SDRAM控制器的Verilog建模之一
  5. c#委托、事件、Observer
  6. 《REWORK》启示录 发出你的心声——程序员与身体
  7. 转:C 函数调用栈
  8. openGL 提升渲染性能 之 顶点数组 VBO IBO VAO
  9. 【整理】Visual Studio快捷键
  10. 「Windows MFC 」「Edit Control」 控件
  11. 【转】Ansys 13.0 flexlm not running完美解决方案
  12. tomcat-maven-plugin 插件使用
  13. Objective C HMAC-MD5
  14. 在自己写的C#类中调用 ASP.NET的Request,server 等对象
  15. mac电脑上如何启动mysql
  16. Pandas学习1 --- 数据载入
  17. linux:ubuntu安装mysql(一)
  18. android-基础编程-democoderjoy-架构篇
  19. 2019微信公开课Pro微信之夜内容笔记总结
  20. 新建用户组、用户、用户密码、删除用户组、用户(适合CentOS、Ubuntu系统)

热门文章

  1. HTML5前端(移动端网站)性能优化指南
  2. Java非静态内部类中为什么不能有静态变量却可以有常量?
  3. Java之设计模式详解 (转)
  4. 【bzoj3991】 寻宝游戏
  5. 使用SecureCRT的SFTP在WINDOWS与LINUX之间传输文件
  6. 如何自己编写一个easyui插件
  7. iOS - libc++abi.dylib: terminate_handler unexpectedly threw an exception
  8. mysql 根据查询结果集更新
  9. js日期加减
  10. JavaWeb学习笔记——jsp内置对象