Yii2 应用结构 过滤器之核心过滤器

8 篇文章 0 订阅

测试代码:

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['index', 'view'],
                //'except' => ['test'],         //在该过滤器中不执行该动作
                'rules' => [
                    [
                        'allow' => true, //yii\filters\AccessRule::allow: 指定该规则是 "允许" 还是 "拒绝" 。(译者注:true是允许,false是拒绝)
                        'actions' => ['index'], //yii\filters\AccessRule::actions:指定该规则用于匹配哪些操作。 它的值应该是操作方法的ID数组。匹配比较是大小写敏感的。如果该选项为空,或者不使用该选项, 意味着当前规则适用于所有的操作。
                        //yii\filters\AccessRule::controllers:指定该规则用于匹配哪些控制器。 它的值应为控制器ID数组。匹配比较是大小写敏感的。如果该选项为空,或者不使用该选项, 则意味着当前规则适用于所有的操作。(译者注:这个选项一般是在控制器的自定义父类中使用才有意义)
                        //yii\filters\AccessRule::roles:指定该规则用于匹配哪些用户角色。 系统自带两个特殊的角色,通过 yii\web\User::isGuest 来判断:
                        //?: 用于匹配访客用户 (未经认证)
                        //@: 用于匹配已认证用户
                        //使用其他角色名时,将触发调用 yii\web\User::can(),这时要求 RBAC 的支持 (在下一节中阐述)。 如果该选项为空或者不使用该选项,意味着该规则适用于所有角色。

                        'roles' => ['?'], //roles 选项包含的问号 ? 是一个特殊的标识,代表”访客用户”。 //@是另一个特殊标识, 代表”已认证用户”。

                        //yii\filters\AccessRule::ips:指定该规则用于匹配哪些 yii\web\Request::userIP 。 IP 地址可在其末尾包含通配符 * 以匹配一批前缀相同的IP地址。 例如,192.168.* 匹配所有 192.168. 段的IP地址。 如果该选项为空或者不使用该选项,意味着该规则适用于所有角色。
                        'ips' => ['*'],

                        //yii\filters\AccessRule::verbs:指定该规则用于匹配哪种请求方法(例如GET,POST)。 这里的匹配大小写不敏感。
                        'verbs' => ['GET','POST'],

                        //yii\filters\AccessRule::matchCallback:指定一个PHP回调函数用于 判定该规则是否满足条件。(译者注:此处的回调函数是匿名函数)
                        'matchCallback' => function ($rule, $action) {
                            ///echo "判断是否满足条件.....";
                            //return true;
                            return false;
                            //return date('d-m') === '07-16';
                        },

                        //yii\filters\AccessRule::denyCallback: 指定一个PHP回调函数, 当这个规则不满足条件时该函数会被调用。(译者注:此处的回调函数是匿名函数)
                        'denyCallback' => function ($rule, $action) {
                            //throw new \Exception('You are not allowed to access this page');
                            //echo "不满足条件时执行denyCallback......";
                            //die();
                            return "不满足条件时执行denyCallback。。。。。。";
                        }
                    ],
                    [
                        'allow' => true,
                        'actions' => ['view'],
                        'roles' => ['?'], 
                    ],
                ],
            ],
        ];
    }

自定义过滤器:

namespace app\modules\article\components;

use Yii;
use yii\base\ActionFilter;

class ActionTimeFilter extends ActionFilter
{
    private $_startTime;

    public function beforeAction($action)
    {
        $this->_startTime = microtime(true);
        return parent::beforeAction($action);
    }

    public function afterAction($action, $result)
    {
        $time = microtime(true) - $this->_startTime;
        Yii::trace("当前Action执行时间为: '{$action->uniqueId}' spent $time second.");
        return parent::afterAction($action, $result);
    }
}

使用自定义过滤器:

    public function behaviors()
    {
        return [

            //使用自定义过滤器
            'actionTime' =>[
                 'class' => ActionTimeFilter::className(),
                 'only' => ['index','view']
            ],
         ]
    }     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值