如果您想使用 onBeginRequest 和 onEndRequest,您可以通过将以下几行添加到配置文件中来实现:
return array (
...
'onBeginRequest'=>array('Y', 'getStats'),
'onEndRequest'=>array('Y', 'writeStats'),
...
)
或者你可以内联完成
Yii::app()->onBeginRequest= array('Y', 'getStats');
Yii::app()->onEndRequest= array('Y', 'writeStats');
where Y
是一个类名并且getStats
and writeStats
是这个类的方法。
现在想象一下你有一节课Y
声明如下:
class Y {
public function getStats ($event) {
// Here you put all needed code to start stats collection
}
public function writeStats ($event) {
// Here you put all needed code to save collected stats
}
}
因此,对于每个请求,这两种方法都会自动运行。当然你可能会想“为什么不简单地重载 onBeginRequest 方法呢?”但首先,事件允许您不扩展类来运行一些重复的代码,并且它们还允许您执行在不同位置声明的不同类的不同方法。
所以你可以添加
Yii::app()->onEndRequest= array('YClass', 'someMethod');
在应用程序的任何其他部分以及以前的事件处理程序中,您将同时运行Y->writeStats
and YClass->someMethod
请求处理后。这种行为允许您创建几乎任何复杂性的扩展组件,而无需更改源代码,也无需扩展 Yii 的基类。