Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Yii中使用事件_Php_Yii_Yii Events - Fatal编程技术网

Php 如何在Yii中使用事件

Php 如何在Yii中使用事件,php,yii,yii-events,Php,Yii,Yii Events,我想在onBeginRequest事件中运行一些代码。 我在哪里做?我假设我不打算将此添加到核心库代码中。 我完全是Yii中的noob我相信在任何输出开始之前,您可以在文件中的任何位置执行此操作,因此它应该在控制器、视图或自定义类中工作,通常位于Yii web应用程序的“受保护”文件夹中。仅供参考,这些文件不是核心文件,可以(几乎)自由编辑,与Yii框架文件类似(由bootstrap index.php文件中的“$Yii”变量引用) 这些函数如下所示: Yii::app()->onbegi

我想在onBeginRequest事件中运行一些代码。
我在哪里做?我假设我不打算将此添加到核心库代码中。

我完全是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应该位于项目结构的何处?