zoukankan      html  css  js  c++  java
  • 开发Yii2过滤器并通过behaviors()行为调用(转)

    在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 frontendlibs;
    use Yii;
    use yiiaseAction;
    use yiiaseActionFilter;
    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 frontendcontrollers;
    use yiiwebcontroller;
    class TestController extends Controller {
        public function behaviors() {
            return [
                'test' => [
                    'class' => 'frontendlibsTestFilter'//调用过滤器
                ]
            ];
        }
        public function actionFilter() {
            return '当前action显示<br/>';//返回的内容会递交给过滤器,由afterAction进行处理
        }
    }
    最后,测试显示结果为:
    在调用action前显示
    当前action显示
    在调用action后显示
    过滤器完成。

  • 相关阅读:
    利用sqlmap进行mysql提权的小方法(win与liunx通用)
    冰蝎绕过阿里云盾和天眼监控的新方法
    关于渗透的小技巧整理
    入侵者已经拿到了主机的管理员权限,请你列举几种留后门的方法:(windows和LINUX系统均可)
    Mysql root账号general_log_file方法获取webshell
    tomcat put上传漏洞批量利用程序v1.1
    ios10.3.3快速越狱指南
    Android的虫洞漏洞挖掘方法研究
    【原创】TransHost远控程序分析
    【转载】微信数据库解密算法
  • 原文地址:https://www.cnblogs.com/sandea/p/6509692.html
Copyright © 2011-2022 走看看