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后显示
    过滤器完成。

  • 相关阅读:
    raid阵列算法/数据恢复方法汇总
    EMC Isilon(OneFS)误删文件数据恢复过程<存储数据恢复>
    Raid磁盘阵列更换磁盘时另一块盘离线(v7000存储数据恢复)
    SqlServer数据库无法读取的数据恢复方案实施过程
    ds4800服务器lvm信息丢失数据恢复方案
    Hyper-V数据文件丢失数据恢复过程
    v7000存储数据恢复成功率分析-数据恢复初检报告
    Ext4文件系统fsck后损坏如何恢复?-北亚数据恢复
    服务器raid5两块硬盘离线lvm vxfs文件系统数据恢复过程
    临时表
  • 原文地址:https://www.cnblogs.com/sandea/p/6509692.html
Copyright © 2011-2022 走看看