开发Yii2过滤器并通过behaviors()行为调用(转)
在Yii2的几乎每个controller中,我们都会看到一个函数behaviors(),通常,我们用这个函数来配置控制器的权限,例如:
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
模仿这些过滤器,我们也可以开发自己的过滤器。
还是把测试的过滤器放到frontend/libs里,新建文件frontend/libs/TestFilter.php
<?php
namespace frontend\libs;
use Yii;
use yii\base\Action;
use yii\base\ActionFilter;
class TestFilter extends ActionFilter
{
//在action之前运行,可用来过滤输入
public function beforeAction($action) {
echo '在调用action前显示<br/>';
return TRUE;//如果返回值为false,则action不会运行
}
//在action之后运行,可用来过滤输出
public function afterAction($action, $result) {
return $result.'在调用action后显示<br/>';//可以对action输出的$result进行过滤,retun的内容会直接显示
}
}
然后新建 文件frontend/controller/TestController.php
<?php
namespace frontend\controllers;
use yii\web\controller;
class TestController extends Controller {
public function behaviors() {
return [
'test' => [
'class' => 'frontend\libs\TestFilter'//调用过滤器
]
];
}
public function actionFilter() {
return '当前action显示<br/>';//返回的内容会递交给过滤器,由afterAction进行处理
}
}
最后,测试显示结果为:
在调用action前显示
当前action显示
在调用action后显示
过滤器完成。
开发Yii2过滤器并通过behaviors()行为调用(转)的更多相关文章
- 开发Yii2过滤器并通过behaviors()行为调用
在Yii2的几乎每个controller中,我们都会看到一个函数behaviors(),通常,我们用这个函数来配置控制器的权限,例如:public function behaviors() { ...
- 《C#微信开发系列(3)-获取接口调用凭据》
3.0获取接口调用凭据 ①接口说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留 ...
- ABP开发框架前后端开发系列---(10)Web API调用类的简化处理
在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...
- ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用
在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...
- Spring AOP开发时如何得到某个方法内调用的方法的代理对象?
Spring AOP开发时如何得到某个方法内调用的方法的代理对象? 问题阅读起来拗口,看代码 在方法中调用其他方法很常见,也经常使用,如果在一个方法内部调用其他方法,比如 public class U ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 外部服务调用、内部服务调用优化,面向服务化的
现在的信息系统越来越复杂,越来越庞大,不仅需要内部是一个整体,而且还需要提供很多对外的服务调用. 1:别人如何调用最方便?用不同的开发语言调用.例如app.手持设备.服务器.2:服务的返回状态是什么样 ...
- javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)
一:servlet开发入门 servlet是sun公司一门开发动态web资源的技术,下面编写一个servlet入门程序: 1:在tomcat服务器webapps目录下新建firstServlet目录, ...
- YII2 过滤器 filters
使用过滤器 过滤器本质上是一类特殊的 行为,所以使用过滤器和 使用 行为一样. 可以在控制器类中覆盖它的 yii\base\Controller::behaviors() 方法来申明过滤器, 如下所示 ...
- 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
上一节课,我给大家分享了微信API接入以及事件推送的回复,这是微信开发的第二节课,重点给说一说单图文回复,多图文回复,access_token,微信SDK. 公众号消息回复很多种形式,常见的形式有,文 ...
随机推荐
- TextBox_TextChanged
private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { TextBox textBox = sender a ...
- javascript进行遍历
javascript进行遍历 <!doctype html> <html lang="en"> <head> <meta charset= ...
- System.Net.Http.Formatting的nuget版本冲突问题
已经添加了nuget Microsoft.AspNet.WebApi.Client 调用System.Net.Http.HttpClient.PostAsJsonAsync的时候报如下的错误: C ...
- idea中dependencies中总是有红色波浪线(缺少dependency)的解决办法
使用IDEA进行maven开发时,将新项目import进工作空间时,Maven Projects栏中的dependencies中总是有红色波浪线,如下图: 但是这些jar在我本地的maven仓库中实际 ...
- Python中的乱码
我把写好的Python脚本导入到ArcGIS中的ToolBox中,在本机测试是没有问题的.为了把工具分享给其他人,即在其他电脑上使用,我必须将脚本文件(*.py)导入到工具箱文件(*.tbx) ...
- WebService SOAP、Restful和HTTP(post/get)请求区别
web service(SOAP) Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力. Web service 就是一个应用程序,它向外界暴露出一个能够通过We ...
- python中的lambda知多少!
python允许使用lambda关键字创造匿名函数,匿名函数是因为不需要以标准的方式来声明,比如说,使用def语句.(除非赋值给一个局部变量,这样的对象也不会再任何的名字空间内创建名字)然而,作为函数 ...
- iOS禁用系统休眠
[UIApplicationsharedApplication].idleTimeDisabled= YES
- PHP Mysql-连接
PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...
- JDK目录结构和文件作用介绍
要想深入了解Java必须对JDK的组成, 本文对JDK6里的目录做了基本的介绍,主要还是讲解了下JDK里的各种可执行程序或工具的用途Java(TM) 有两个平台 JRE 运行平台,包括Java虚拟机, ...