您的位置:首页 > 编程语言 > PHP开发

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']
],
]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: