yii2过滤器
过滤器是 控制器 动作 执行之前或之后执行的对象。
示例
过滤器 common\components\ActionTimeFilter
<?php
namespace app\common\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::info("Action '{$action->uniqueId}' spent $time second.");
return parent::afterAction($action, $result);
}
}
控制器里使用过滤器 controllers\TestController
<?php
namespace app\controllers;
class TestController extends \yii\base\Controller
{
public function behaviors(){
return [
[
'class' => 'app\common\components\ActionTimeFilter'
]
];
}
public function actionIndex(){
return $this->render('index');
}
}
访问 (runtime/logs/app.log)
http://www.yii2.com/test/index
访问控制 ACF
AccessControl提供基于yii\filters\AccessControl::rules规则的访问控制
public function behaviors(){
return [
'access' => [
'class' => AccessControl::class,
'rules' => [
[
// 当前rule将会针对这里设置的actions起作用,如果actions不设置,默认就是当前控制器的所有操作
'actions' => ['index', 'view', 'create', 'update', 'delete', 'signup'],
// 设置actions的操作是允许访问还是拒绝访问
'allow' => true,
// @ 当前规则针对认证过的用户; ? 所有方可均可访问
'roles' => ['@'],
],
[
'actions' => ['index'],
'allow' => true,
// 设置只允许操作的action
'verbs' => ['POST'],
],
[
'actions'=>['index'],
'matchCallback'=>function($rule,$action){
return Yii::$app->user->id == 1 ? true : false;
},
'allow'=>true
]
],
]
];
}
yii\filters\VerbFilter
VerbFilter检查请求动作的HTTP请求方式是否允许执行,如果不允许,会抛出HTTP 405异常
use yii\filters\VerbFilter;
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'index' => ['get'],
'view' => ['get'],
'create' => ['get', 'post'],
'update' => ['get', 'put', 'post'],
'delete' => ['post', 'delete'],
],
],
];
}
yii\filters\CORS
跨域资源共享 CORS 机制允许一个网页的许多资源(例如字体、JavaScript等) 这些资源可以通过其他域名访问获取
public function behaviors()
{
return [
'corsFilter' => [
'class' => \yii\filters\Cors::class,
'cors' => [
'Origin' => ['*'],
],
],
];
}
HTTP 基本认证: \yii\filters\auth\HttpBasicAuth
public function behaviors()
{
return [
'basicAuth' => [
'class' => \yii\filters\auth\HttpBasicAuth::class,
'auth' => function ($username, $password) {
$user = User::find()->where(['username' => $username])->one();
if ($user->verifyPassword($password)) {
return $user;
}
return null;
},
],
];
}
标签:function,return,yii,actions,filters,过滤器,yii2,class
From: https://www.cnblogs.com/hu308830232/p/18105403