yii2项目实战-预定义事件的使用
前面我们讲解了事件的基本操作,这节课我们主要讲一下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%的精彩内容,购买继续阅读
- 评论区