yii2项目实战-预定义事件的使用
更新于 2017年07月26日 by 白狼 被浏览了 1779 次
0 0

前面我们讲解了事件的基本操作,这节课我们主要讲一下yii2预定义事件的使用。

什么是预定义的事件呢?

就是yii在源码内提前定义好的,注意这个定义好并不是其提前on好的,而是提前trigger好的。当然你可能听不懂,带着疑问继续看下去。

yii内其实还是定义了很多事件的,我们主要介绍三种事件的使用,包括跟应用相关的,跟user组件相关以及最常用的model相关事件,另外在文中案例的,我们多次提及yii2-debug,也希望各位能把yii2-debug掌握了,实际开发中更可以充分利用yii2-debug进行调试优化。

前方预警:本篇文章含金量高且内容知识点较多,请注意阶段性揣摩休息再继续。

老师你别BB了,我都等不及了,快开始吧

应用相关事件

在yii中,我们知道,一个项目,就是一个应用。在程序中这个应用用Yii::$app来表示,既然是应用级别的事件,那自然就跟Yii::$app摆脱不了干系!

正如我们在事件初识一文所说,当你尝试去分析yii执行过程的时候,yii\base\Application类中定义了下面这两个事件

const EVENT_BEFORE_REQUEST = 'beforeRequest';
const EVENT_AFTER_REQUEST = 'afterRequest';

并在yii\base\Application的run方法中触发,即分别在处理请求的前后触发。

通过前面的学习我们知道,要想使trigger起作用,只需要在trigger之前通过on绑定好事件就可以了。也就是说我们现在只需要在执行yii\base\Application的run方法之前通过on绑定该事件并指定回调函数就能够被触发。来看下我们的例子

打开backend\web\index.php文件,我们写点什么

$application = new yii\web\Application($config);
Yii::$app->on(yii\base\Application::EVENT_BEFORE_REQUEST, function ($event) {
    yii::info('This is beforeRequest event.');
});
Yii::$app->on(yii\base\Application::EVENT_AFTER_REQUEST, function ($event) {
    yii::info('This is afterRequest event.');
});
$application->run();

为了证明是否是在处理请求前后触发,请务必打开yii自带的debug后再访问/index.php。

在debug中找到Log相关,为了说明问题,我这里简要复制下日志信息,当然你的条数可能跟我这里不一样,大概会差不多。

# Time Level Category Message
1 22:42:33.159 trace yii\base\Application::bootstrap Bootstrap with yii\log\Dispatcher
2 22:42:33.159 trace yii\base\Module::getModule Loading module: debug
// 此处省略第 3-5条日志信息
6 22:42:33.194 info application This is beforeRequest event.(省略具体文件路径)
// 此处省略第 7-21条日志信息
22 22:42:33.487 info application This is afterRequest event.(省略具体文件路径)

说明:上面的第一列 1 2 6 22 指的是执行的先后顺序,第二列是执行的时间,第三列是日志级别,我们在index.php中用的是yii::info,因此这里的级别是info,第四列是分类,最后一列便是我们记录的消息了。

通过debug分析,我们很轻松的证明了官方的代码没有错,我们的理解也没有错!

友情提醒:yii的debug那是相当的好用,还不用使用的同学抓紧时间尝鲜啦。熟练使用debug,妈妈再也不用担心开发中的调试优化了。

user组件相关事件

广告:可能很多小伙伴下面的精彩内容就无法享受了,我还是希望感兴趣的同学花一份午饭钱购买后再继续看下去,一个系列一顿饭,“好吃不贵”。正所谓不花钱不心疼不珍惜嘛。

广告回来,来来我们继续。

时至今日,yii2的user组件不知道各位还有没有印象了?实际开发中我们往

继续阅读

还有58%的精彩内容,购买继续阅读