您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)event事件在Yii Framework框架中的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
假設(shè)有類MyComponent,它是繼承于CComponent,通過查看 CComponent 的 __set() 方法,
public function __set($name,$value) { $setter='set'.$name; if(method_exists($this,$setter)) return $this->$setter($value); else if(strncasecmp($name,'on',2)===0 && method_exists($this,$name)) { // duplicating getEventHandlers() here for performance $name=strtolower($name); if(!isset($this->_e[$name])) $this->_e[$name]=new CList; return $this->_e[$name]->add($value); } else if(is_array($this->_m)) { foreach($this->_m as $object) { if($object->getEnabled() && (property_exists($object,$name) || $object->canSetProperty($name))) return $object->$name=$value; } } if(method_exists($this,'get'.$name)) throw new CException(Yii::t('yii','Property "{class}.{property}" is read only.', array('{class}'=>get_class($this), '{property}'=>$name))); else throw new CException(Yii::t('yii','Property "{class}.{property}" is not defined.', array('{class}'=>get_class($this), '{property}'=>$name))); }
第四行可知,我們可以通過 onXXX 來直接設(shè)置事件的。
方法一:
直接在main.php里面定義
/*************************************************** 在我們想要的內(nèi)容的前后出現(xiàn)了這些代碼 只是為了說明,我們添加的內(nèi)容是要放在 這個配置數(shù)據(jù)的一維里面。 'import'=>array( 'application.models.*', 'application.components.*', 'application.helpers.*', ), 'defaultController'=>'post', ***************************************************/ //其它代碼 'import'=>array( 'application.models.*', 'application.components.*', 'application.helpers.*', ), /************** 這才是我們想要添加的代碼 **************/ 'onBeginRequest' => array('MyEventHandler', 'MyEventHandlerMethod'), 'defaultController'=>'post', //其它代碼
方法二:
//參考自framework/logging/CLogRouter.php的init()方法 Yii::app()->attachEventHandler('onEndRequest',array($this,'processLogs'));
綁定到局部事件處理
隨時隨地?zé)o論在controller還是model里面,只要是CComponent的子類,都可以這樣定義,
$myComponent->onClick = $callback;
這里的 $callback 指向了一個有效的 PHP 回調(diào)。它可以是一個全局函數(shù)也可以是類中的一個方法。
如果是后者,它必須以一個數(shù)組的方式提供 : array($object,'methodName')
。
看完上述內(nèi)容,你們對event事件在Yii Framework框架中的原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。