1. 行为是对类的功能进行了扩展,针对开闭原则,为了类的扩展而生,不去修改类原有的代码。
  2. yii的行为需要继承yii\base\Behavior,这就好比你要给人安装一个胳膊,这个胳膊得是人的,而不能是老虎的、大象的,要遵守这个规范。
  3. 而接受行为绑定的类必须得是继承了component的子类,同样是一个规范吧。
  4. 转  yii行为的讲解:https://blog.csdn.net/qq_24127857/article/details/79394485
  5. 经测试发现,如果给一个类绑定了两个行为,并且这两个行为类里面都定义了相同的属性name, 那么在调用这个name属性的时候,不会报错,而是会调用写在前面的行为类的name属性。具体见代码
    class TestController extends Controller
    {
    public function actionTest()
    {
    echo 'this is test action<br>';
    $this->foo();
    $this->who();
    echo $this->name; //这个属性是MyBehavior 和 YourBehavior 都有的属性,这里不会报错
    } public function behaviors()
    {
    return [
    'mybehavior' => MyBehavior::className(), //这个在前,那么就调用MyBehavior里的name属性,而不是报错
    'yourbehavior' => YourBehavior::className(), //
    ];
    }
    } //第一个行为类MyBehavior
    class MyBehavior extends Behavior
    {
    public $name = 'me';
    public $age; public function foo()
    {
    echo 'this is foo function<br>';
    } public function bar()
    {
    return 'this is bar function<br>';
    }
    } //第二个YourBehavior
    class YourBehavior extends Behavior
    {
    public $name = 'you'; public function who()
    {
    echo 'who are you?<br>';
    }
    }
  6. 过滤器
    //还是上面的TestController调用
    class MyFilter extends ActionFilter
    {
    public $name; public function beforeAction($action)
    {
    echo '这个 是在test function 之前执行的beforeAction<br>';
    return parent::beforeAction($action);
    } public function afterAction($action, $result)
    {
    echo '这个是在test function 之后执行的afterAction<br>';
    $result = 'result 有什么用呢?<br>';
    return parent::afterAction($action, $result); // TODO: Change the autogenerated stub
    } public function beforeFilter($event)
    {
    echo 'this is event? beforeFilter<br>';
    return parent::beforeFilter($event); // TODO: Change the autogenerated stub
    } public function afterFilter($event)
    {
    echo 'this is event? afterFilter<br>';
    parent::afterFilter($event); // TODO: Change the autogenerated stub
    }
    }
    //output:
    this is event? beforeFilter
    这个 是在test function 之前执行的beforeAction
    this is tes action
    this is event? afterFilter
    这个是在test function 之后执行的afterAction
    result 有什么用呢?

yii行为和过滤器的更多相关文章

  1. Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)

    在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示 ...

  2. ElasticSearch 嵌套映射和过滤器及查询

    ElasticSearch - 嵌套映射和过滤器 Because nested objects are indexed as separate hidden documents, we can’t q ...

  3. django中自定义标签和过滤器

    想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1  在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个tem ...

  4. angular实例教程(用来熟悉指令和过滤器的编写)

    angular的插件太少了,  所以很多指令和过滤器都要自己写,  所以对指令传进来的参数, 以及angular编译的流程更加熟悉才行写出好的插件, 有些简单的指令是参考angularUI里面, 作为 ...

  5. .NET中的视图和过滤器 (DefaultView和RowFilter)

    NET中的视图和过滤器 (DefaultView和RowFilter) ADO.NET中有一层对象,用来创建任意数据源的抽象模型.其中包括DataSet,DataTable,DataRow,DataV ...

  6. django 自定义标签和过滤器

    django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个pyt ...

  7. solr英文使用的基本分词器和过滤器配置

    solr英文应用的基本分词器和过滤器配置 英文应用分词器和过滤器一般配置顺序 索引(index): 1:空格 WhitespaceTokenizer    2:过滤词(停用词,如:on.of.a.an ...

  8. django 内建标签和过滤器参考

    下面的标签和过滤器参考就是为那些没有 admin 站点的可用的人准备的.由于 Django 是高度可定制的,你的 admin 里的关于标签和过滤器的参考可以认为是最可信的. 内建标签参考 block ...

  9. J2EE监听器和过滤器基础

    Servlet程序由Servlet,Filter和Listener组成,其中监听器用来监听Servlet容器上下文. 监听器通常分三类:基于Servlet上下文的ServletContex监听,基于会 ...

随机推荐

  1. ORACLE的客户端、后台进程

    Oracle数据库进程之服务器进程详解 Oracle实例主要有三类进程:服务器进程.后台进程和从属进程.这里介绍一下Oracle数据库服务器进程的相关知识 Oracle数据库中的各个进程要完成某个特定 ...

  2. 1186: 零起点学算法93——改革春风吹满地(C)

    一.题目 http://acm.wust.edu.cn/problem.php?id=1186&soj=0 二.分析 多组输入,'0'结束: 顶点的个数在3至100之间: 一定顺序输入坐标: ...

  3. js 监听键盘的enter键

    // js 版本 window.onload=function(){ document.onkeydown=function(ev){ var event=ev ||event if(event.ke ...

  4. root用户和sudo使用root权限的区别(转)

    百度百科:https://baike.baidu.com/item/sudo/7337623?fr=aladdin sudo指令 功能: 以root的身分执行命令 语法: sudo 其他指令 用户: ...

  5. Unity插件研究-EasyTouch V5

    抽空研究了下Easy Touch 5插件,发现确实很好用,下面是相应的用法: 1. Easy Touch Controls:实现虚拟摇杆的组件 在项目的"Hierarchy"窗口下 ...

  6. (十五)SpringBoot之使用Redis做缓存数据

    一.添加Redis依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  7. 一篇文章彻底搞懂异步,同步,setTimeout,Promise,async

    之前翻看别的大佬的博客看到了关于setTimeout,promise还有async执行顺序的文章.观看了几篇之后还是没有怎么看懂,于是自己开始分析代码,并整理了此文章,我相信通过此文章朋友们能对异步同 ...

  8. linux 添加硬盘找不到使用/sys/class/scsi_host/host/scan

    添加磁盘到dg--首先通知存储管理员划分相应的盘到指定的机器,说明共享--扫描磁盘(两个节点执行)[root@testrac1 ~]# echo "- - -" > /sys ...

  9. # 机器学习算法总结-第八天(SKlearn中的kmeans/随机森林)

    随机森林 这篇好好看看怎么调参的 我调的最佳参数如下,准确率为0.8428671546929973,细节看上篇文章: alg = RandomForestClassifier(n_estimators ...

  10. 5.管道 Pipe

    /*管道(Pipe)*/ Java NIO 管道是 /*2 个线程*/ 之间的 /*单向*/数据连接 Pipe 有一个 source 通道 和 一个 sink 通道.数据会被写到 sink 通道,从s ...