分享好友 编程语言首页 频道列表

Yii2过滤器-behaviors()行为调用

PHP教程  2016-12-23 12:423

使用行为(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后显示

查看更多关于【PHP教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 3
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
yii 隐藏index.php
    首先,开启apache的rewrite模块    去掉rewrite前的#,如下所示    LoadModule rewrite_module modules/mod_rewrite.so     接着,在yii的index.php同级目录建立.htaccess文件,内容如下    IfModule mod_rewrite.c       Optio

0评论2023-02-09540

php Yii2框架创建定时任务方法详解
目录简单的定时任务脚步文件传递参数设置参数别名在Linux配置crontab在我们项目开发中,需要使用定时任务来完成批处理业务,下面通过Yii2框架来实现定时任务Yii2框架定时任务代码统一放在 ./console 目录下简单的定时任务脚步文件首先在console/controller目

0评论2023-02-08634

yii2的数据库层设计
Yii2在M层的抽象做的很经典,值得分析理解。QueryBuilder不同的数据库引擎(mysql,oracle…)执行相同的SQL,可能语法有一些细微的差异,但是SQL整体语法差别不大,所以会定义一个QueryBuilder基类,它提供一般通用的SQL生成方法,具体每个数据库引擎继承Quer

0评论2017-02-05508

码云推荐 | 基于Yii2的后台开源骨架 openadm-yii2
OpenAdmOpenAdm是一个基于Yii2的后台开源骨架,集成了用户和插件系统,使用主题功能,默认使用AdminLTE2的模板的主题,可以非常方便的开发新的功能。Demo地址:http://yii2.openadm.com后台账号: admin后台密码: admin仓库地址:OSC:https://git.oschina.net/xiong

0评论2017-02-05715

Yii2配置多语言
我的YII2版本是2.0.7, 设置多语言时和其他教程有不同的地方, 所以整理如下1. 在一个controller里面写一个调用i18n的语句, 比如actionIndexecho \Yii::t('app', 'whatisthis');现在进入这个页面, 页面输出whatisthis2. 手动创建一个文件夹messages来存放多语言

0评论2017-02-05507

Yii 2.0.11.1 发布,高性能 PHP 框架
Yii 2.0.11.1 发布了。Yii是一个高性能的PHP5的web应用程序开发框架。通过一个简单的命令行工具 yiic 可以快速创建一个web应用程序的代码框架,开发者可以在生成的代码框架基础上添加业务逻辑,以快速完成应用程序的开发。 更新内容: Bug #11502: Fixed yii\

0评论2017-02-05161

简述Yii2里的AOP思想
AOP是什么在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP解决什么将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过

0评论2016-12-23342

浅析Yii2的view层设计
Yii2.0的view层提供了若干重要的功能:assets资源管理,widgets小组件,layouts布局…下面将通过对Yii2.0代码直接进行分析,看一下上述功能都是如何实现的,当然细枝末节的东西不会过多赘述,如果你对此感兴趣又懒得自己去翻代码和文档,那么这篇博客可以快速

0评论2016-12-23296

使用PHPWord对Word文件做模板替换
因工作需要,使用了版本比较旧的PHPWord项目官方已不见维护更新,上次版本更新是在Fri Jul 8, 2011 at 8:00 AM如果PHP版本=5.3.3,强烈推荐使用PHPOffice/PHPWord这个开源项目本篇针对的为旧版本的PHPWord基本安装见官网问题总结Autoloader自动加载部分情况下

0评论2016-12-231308

yii2框架的错误处理
在查找yii2相关开发资料过程中发现很多人对yii2的错误处理流程不清楚,尤其是经常有一些疑惑,比如”为什么我的程序一旦出现问题,就会自动打印出错误呢?它是怎么监听的?在哪里用的try catch?”,下面我详细的描述一下错误处理流程。预定义开启错误处理常

0评论2016-12-23322

记Yii2的一个坑
最近发现有些服务器会定期出现磁盘过载问题,这里记录一下追查过程,供参考。11月10日,立山向我反映我们线上的某 service 出现了一小段时间的无响应,查看 error log,发现有几百条208203204 connect() to unix:/var/run/php5-fpm.sock failed (11: Resource

0评论2016-11-23206

Yii2的主从数据库设置
在yii1的时候,主从数据库的支持没有那么方便,只能写上多个DB的components,然后在AR的getDB中返回相应的db。这样也可以用来对付主从数据库Yii2则已经解决这个问题,直接在代码中进行处理即可:PHP代码'db' =[ 'class' = 'yii\db\Connection',// 配置主服务

0评论2016-11-22134

完虐Yii从这里开始?
目录简单配置概述Yii安装数据库实战附加福利前提条件安装:XAMPP、MAMPP,WAMPP。。。。下载好了Yii Advanced这里大概说说一下上面几点及遇到的问题1:简单配置概述因为我一直都是用Mac,所以首选XAMPP,这个安转很简单安装好了之后直接操作这些就可以关于XAM

0评论2016-11-1399

Yii2 静态方法 中怎么触发事件
在ActiveRecord的init中写了一个简单的事件触发:PHP代码public function init(){ $event = new XxxEvent(); $this-on(self::EVENT_AFTER_UPDATE,[$event,'doSomeThing']);parent::init();}就是这么简单,然后在程序中有一段触发:PHP代码public static xxx(){

0评论2016-10-31118

Yii2 updateAll tips
Yii2 中的updateAll可以接受三个参数,$attributes,$condition,$params = null第一个参数是要更新的值,第二个是条件,如果第二个条件中用了占位符,就必须 要有第三个条件。平时我们查询 的时候用andWhere()可以连接很多参数,那么updateAll的时候,如果有多

0评论2016-10-31129

更多推荐