您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關event事件在Yii Framework框架中的原理是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
假設有類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 來直接設置事件的。
方法一:
直接在main.php里面定義
/*************************************************** 在我們想要的內容的前后出現了這些代碼 只是為了說明,我們添加的內容是要放在 這個配置數據的一維里面。 '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'));
綁定到局部事件處理
隨時隨地無論在controller還是model里面,只要是CComponent的子類,都可以這樣定義,
$myComponent->onClick = $callback;
這里的 $callback 指向了一個有效的 PHP 回調。它可以是一個全局函數也可以是類中的一個方法。
如果是后者,它必須以一個數組的方式提供 : array($object,'methodName')
。
看完上述內容,你們對event事件在Yii Framework框架中的原理是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。