zoukankan      html  css  js  c++  java
  • 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()确保自身的行为一定会被加载..

  • 相关阅读:
    阿里安全归零实验室招聘各路大牛!offer好说!
    露脸!钉钉通过SOC2隐私性原则审计,安全和隐私保护达超一流国际标准
    BAT齐聚阿里安全-ASRC生态大会:呼吁联合共建网络安全白色产业链
    v3-4_-vict-、-vinc-胜利,征服
    Grammar01 语法七要素之一_词类
    Grammar00_英语学习铁律
    SpokenEnglish01_ When's it due?
    SpringBoot31 重识Spring01-环境搭建、Actuator监控、属性配置、多环境配置
    Shrio04 自定义Realm
    Shrio03 Authenticator、配置多个Realm、SecurityManager认证策略
  • 原文地址:https://www.cnblogs.com/zhepama/p/3851842.html
Copyright © 2011-2022 走看看