yii2项目实战-事件的理解
更新于 2016年11月24日 by 白狼 被浏览了 825 次

前言

如果你是从实战的开篇一直看到这里,相信使用yii2做一些的基本的开发,对你来说应该是比较轻松了。那有些人就想要提高自身的技术能力,比方说开始研究源码,通读,熟悉底层架构的执行流程等。下面我们就假设有些人的臆想,仅仅先做一个了解,后文会做具体分析。

比如从入口文件分析,调用了yii\base\Application(yii\web\Application继承该类)的run方法,该方法里面有如下两行代码看不懂啊,瞬间整个人都不好了。

$this->trigger(self::EVENT_BEFORE_REQUEST);
$this->trigger(self::EVENT_AFTER_REQUEST);

那先暂停,先不研究这个了,那就从增删改查开始研究吧。

以创建栏目为例(我们只看大概,不追究细节):

1、实例化Category模型

2、调用common\models\Category的load方法和save方法,实质是调用yii\base\Model的load方法和yii\db\BaseActiveRecord的save方法

3、那我来看看yii\db\BaseActiveRecord的save方法是怎么实现的

调用yii\db\ActiveRecord的insert方法->调用yii\db\ActiveRecord的insertInternal方法->调用yii\db\BaseActiveRecord的beforeSave方法.....

好嘛,研究不要紧,没看几处源码又看不下去了

public function beforeSave($insert)
{
    $event = new ModelEvent;
    $this->trigger($insert ? self::EVENT_BEFORE_INSERT : self::EVENT_BEFORE_UPDATE, $event);

    return $event->isValid;
}

这都是什么鬼,实在看不下去了,我心塞......

正所谓抛砖引玉,不知道我抛出去的砖是否砸动了你的心?下面拿出我的“玉”与你共享。

事件是什么?

事件,大家都不陌生。平时谁谁谁上新闻啦,哪哪个公司副总怎么滴怎么滴啦,这些都是事件。但是此事件非彼事件,相信各位平时接触的比较多的应该还是javascript里面的事件。比如说要给某DOM元素绑定一个事件,点击触发后会做出什么响应。注意我们在javascript里面实现的这个过程哦,我们是用on方法给某DOM元素绑定一个事件,即预先定义好一个事件;其次,事件触发后又是如何做出响应的呢?是不是为on方法写了一个回调函数进行处理的呢?光说不练不是我们的风格,来看一个js例子:

$('#e

继续阅读

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