Swift
编程
Swift51.com
首页
社区
▼
资讯
问答
分享
建议
开源代码
Xcode下载
Swift教程
hot
登录
注册
当前位置:
首页
> 分享
欢迎加入QQ讨论群258996829
苹果6袋
6
麦子学院
Yii2框架学习之过滤器behaviors()行为调用详解
发布时间:2016-12-21 15:44 回复:0 查看:3325 最后回复:2016-12-21 15:44
在
Yii2框架开发
中,使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充。 通过将行为绑定到一个类,可以使类具有行为本身所定义的属性和方法,就好像类本来就有这些属性和方法一样。 而且不需要写一个新的类去继承或包含现有类。
Yii中的行为,其实是 yii\base\Behavior 类的实例, 只要将一个Behavior实例绑定到任意的 yii\base\Component 实例上, 这个Component就可以拥有该Behavior所定义的属性和方法了。而如果将行为与事件关联起来,可以玩的花样就更多了。
在Yii2的几乎每个controller中,我们都会看到一个函数behaviors(),通常,我们用这个函数来配置控制器的权限,例如:
/**
* 行为过滤器(beforeAction,afterAction)
* @author wangying
* @override 方法重写
* @return array
*/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
模仿这些过滤器,我们也可以开发自己的过滤器。
还是把测试的过滤器放到app/base/filters里,新建文件TestFilter.php
namespace app\base\filters;use Yii;use yii\base\Action;use yii\base\ActionFilter;class TestFilter extends ActionFilter{
//在action之前运行,可用来过滤输入
public function beforeAction($action)
{
echo '在调用action前显示';
return TRUE;//如果返回值为false,则action不会运行
}
//在action之后运行,可用来过滤输出
public function afterAction($action, $result)
{
return $result.'在调用action后显示';//可以对action输出的$result进行过滤,retun的内容会直接显示
}
}
然后新建 文件app/controller/TestController.php
namespace frontend\controllers;
use yii\web\controller;class TestController extends Controller {
public function behaviors() {
return [
'test' => [
'class' => app\base\filters\TestFilter'//调用过滤器
]
];
}
public function actionFilter() {
return '当前action显示';//返回的内容会递交给过滤器,由afterAction进行处理
}
}
最后,测试显示结果为:
在调用action前显示
当前action显示
在调用action后显示
来源:尘埃
取消引用
您还未登录,
请先登录
提 问
热门帖子
iDev 全平台开发者大会门票免费送!限量10张!
苹果Mac Pro垃圾桶 最低配的ME253CH
本人想买个苹果电脑搞开发,哪位大侠指点下
求助:failable initializer 'init(name:)' cannot override a non-failable initializer
为庆祝Swift发布1个月,雨燕社区正式上线。
在UITextFeild里输入数据,这个数据怎么做加减乘除?
Swift 高仿喜马拉雅FM
要成为自由职业者?先要学会苹果的Swift哦
关于嵌入式引用\()
用swift实现的调用系统相机,相册的DEMO
Swift 教程
最新帖子
swift_5.3可以更新了
swift如何实现左滑删除
IBM Swift Sandbox访问
Thread 18: Fatal error: 'try!' expression unexpectedly raised an error: Error
跟随手势滑动的ScrollableTextField
Swift5.0什么时候出
什么时候出5.0
PerfectTemplate 无法编译
WWDC19 苹果宣布全新 UI 框架 SwiftUI
水平滚动视图Carousel
Xcode 9.4下载