Php 如何在Yii中使用事件
我想在onBeginRequest事件中运行一些代码。Php 如何在Yii中使用事件,php,yii,yii-events,Php,Yii,Yii Events,我想在onBeginRequest事件中运行一些代码。 我在哪里做?我假设我不打算将此添加到核心库代码中。 我完全是Yii中的noob我相信在任何输出开始之前,您可以在文件中的任何位置执行此操作,因此它应该在控制器、视图或自定义类中工作,通常位于Yii web应用程序的“受保护”文件夹中。仅供参考,这些文件不是核心文件,可以(几乎)自由编辑,与Yii框架文件类似(由bootstrap index.php文件中的“$Yii”变量引用) 这些函数如下所示: Yii::app()->onbegi
我在哪里做?我假设我不打算将此添加到核心库代码中。
我完全是Yii中的noob我相信在任何输出开始之前,您可以在文件中的任何位置执行此操作,因此它应该在控制器、视图或自定义类中工作,通常位于Yii web应用程序的“受保护”文件夹中。仅供参考,这些文件不是核心文件,可以(几乎)自由编辑,与Yii框架文件类似(由bootstrap index.php文件中的“$Yii”变量引用) 这些函数如下所示:
Yii::app()->onbeginRequest = create_function('$event', 'return function_name_a();');
Yii::app()->onendRequest = create_function('$event', 'return function_name_b();');
如果要使用onBeginRequest和onEndRequest,可以通过在配置文件中添加以下行来实现:
return array (
...
'onBeginRequest'=>array('Y', 'getStats'),
'onEndRequest'=>array('Y', 'writeStats'),
...
)
或者你可以在线做
Yii::app()->onBeginRequest= array('Y', 'getStats');
Yii::app()->onEndRequest= array('Y', 'writeStats');
其中,Y
是一个类名,getStats
和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
和YClass->somethod
。通过这些行为,您可以创建几乎任何复杂度的扩展组件,而无需更改源代码和扩展Yii的基类。您能做到Yii::app()->onendRequest=function(){//do somthing}代码>不确定,我已经有一段时间没有使用它了,但是在5.3中,您可以尝试=return function()使用($event){/*dosomthing*/}代码>create_函数
不应使用。使用匿名函数。那么,如果我将clas添加到配置文件中,clas应该位于项目结构的何处?