Yii2 应用结构 过滤器之核心过滤器
2016-07-16 17:23
531 查看
测试代码:
自定义过滤器:
使用自定义过滤器:
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'] ], ] }
相关文章推荐
- php变量引用赋值一些知识
- ThinkPHP常用配置路径
- php对特殊字符的处理
- PHP之判断输入的字符串是不是回文
- thinkphp的model三大自动功能
- phpstudy搭建laravel5.2
- PHP中的数组
- PHP入门(8) 面向对象(3) 接口
- PHP命名空间(Namespace)的使用详解
- thinkphp【错误改动大全】
- PHP入门(8) 面向对象(2) 抽象类
- PHP入门(8) 面向对象(1) 方法和属性的覆盖 访问父类
- yum升级PHP5.0.1->PHP5.3.0
- PHP之10个整数,从小到大排序,输出排序结果
- PHP之判断是不是素数
- Yii2 应用结构之模块
- PHP-Mmecache操作类详细介绍
- PHP入门(7) 静态属性的访问
- 【AD】【Server2008R2】 PDC NTP Client/NTP Server的设置 ...
- [php]继承