• yii2中的事件和行为


    Event 事件

    事件是为了解耦...

    注册事件

    使用"on add"添加属性,注册事件 使用on方法注册事件. 第三个参数$data是监听函数使用的参数, 第四个$append参数设置为false则把改事件的方法给添加到最前面,会先触发 事件种类: 匿名函数:function($event){} 对象方法:[$object,"handleAdd"] 静态类方法:["Page","handleAdd"] 全局函数:"handleAdd"

    		namespace frontend	ests;
    		use yiiaseComponent;
    		class EventTest extends Component{
    
    		}
    
    	    $a = new EventTest();
        	$p = "on add";
        	$a->$p = function($event){
        		print "匿名函数";
        	}
        	function add($event){
        		print "全局函数";
        	}
        	$a->on("add", "add");
        	    	
        	$a->trigger("add");
    

    触发事件

    触发事件的时候,会传送一个$event对象给监听函数.该事件对象有sender.name.$handled和data以及$_events属性 sender 就是组件本身,事件的发送者 name 事件名称 handled 设置该属性可以阻止事件的继续触发..比如判断登录错误.验证一个事件时出现错误.把这个设置为true.就不会继续传播了 $_events 存储的数据是$_events[$name][$class] 事件名...类名..最后会根据类名再循环找到所有的父类的事件

            $this->ensureBehaviors();  //确保自身behaviors()函数中的行为被添加
            if (!empty($this->_events[$name])) {
                if ($event === null) {
                    $event = new Event;
                }
                if ($event->sender === null) {
                    $event->sender = $this;
                }
                $event->handled = false;
                $event->name = $name;
                foreach ($this->_events[$name] as $handler) {
                    $event->data = $handler[1];
                    call_user_func($handler[0], $event);
                    // stop further handling if the event is handled
                    if ($event->handled) {   //如果false则直接返回
                        return;
                    }
                }
            }
            // invoke class-level attached handlers
            Event::trigger($this, $name, $event);//执行事件本身的events,
    

    注意最后一步,你可以为某个有继承关系的类自定义一个事件..这里会执行父类的事件

    移除事件

    使用off移除事件.没什么好说的了

    Behavior 行为

    无论是事件还是行为,经常能够看到这个方法ensureBehaviors() 该方法确保该组件默认的behaviors()方法中的组件总是被加载的... 没弄明白,yii作者为什么这么写...放在构造函数中执行一次不是更好...

    行为的使用

    • 1.行为中的属性,在该类中也可以使用
    • 2.行为中的方法,在该类中也可以使用
    • 3.继承与Behavior类的行为,会将其自身的$_events中的事件绑定到该类

    注册行为

    attachBehavior,attachBehaviors 这两个首先会执行ensureBehaviors()确保自身的行为一定会被加载..

  • 相关阅读:
    Elasticsearch排序与相关性
    Elasticsearch请求体查询
    编码问题
    Mybatis
    Spring Framework
    线上的一些坑记录
    【小程序】---- 实现授权与登录的基本流程
    【小程序】---- 封装请求
    【小程序】---- 自定义数字键盘拨号
    不为人知的网络编程(十二):彻底搞懂TCP协议层的KeepAlive保活机制
  • 原文地址:https://www.cnblogs.com/zhepama/p/3851842.html
Copyright © 2020-2023  润新知