yii2中的事件和行为
Event 事件
事件是為了解耦...
注冊事件
使用"on add"添加屬性,注冊事件 使用on方法注冊事件. 第三個參數$data是監聽函數使用的參數, 第四個$append參數設置為false則把改事件的方法給添加到最前面,會先觸發 事件種類: 匿名函數:function($event){} 對象方法:[$object,"handleAdd"] 靜態類方法:["Page","handleAdd"] 全局函數:"handleAdd"
namespace frontend\tests;use yii\base\Component;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 handledif ($event->handled) { //如果false則直接返回return;}}}// invoke class-level attached handlersEvent::trigger($this, $name, $event);//執行事件本身的events,注意最后一步,你可以為某個有繼承關系的類自定義一個事件..這里會執行父類的事件
移除事件
使用off移除事件.沒什么好說的了
Behavior 行為
無論是事件還是行為,經常能夠看到這個方法ensureBehaviors() 該方法確保該組件默認的behaviors()方法中的組件總是被加載的... 沒弄明白,yii作者為什么這么寫...放在構造函數中執行一次不是更好...
行為的使用
- 1.行為中的屬性,在該類中也可以使用
- 2.行為中的方法,在該類中也可以使用
- 3.繼承與Behavior類的行為,會將其自身的$_events中的事件綁定到該類
注冊行為
attachBehavior,attachBehaviors 這兩個首先會執行ensureBehaviors()確保自身的行為一定會被加載..
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的yii2中的事件和行为的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gulp学习笔记,基本使用流程,基本函数
- 下一篇: hadoop--日志聚集功能的配置