参考:深入理解Yii2.0 www.digpage.com
一、Yii 使用经历和感想
我在学习阶段使用过ThinkPHP, 自工作伊始就一直使用YII,大多数工作局限在MVC。相当多的代码是参考文档一点点凑起来的,只需要少量的代码就可以完成很多工作,甚至Yii还提供了代码生成工具Gii。对于这些代码知其用不知其所以然,反正觉得Yii真是方便。
这个框架对于生成基础的表单,数据展示也是一套一套的,但是想要进行修改时就比较头疼了,比如一个GridView, 当我想在某一列中加上一个class时就不知从何下手,并不知道他还有什么属性可以配置。在它有强大的类手册可以参考,这一点对我的开发帮助很大。
在上面这个场景中,我们可以先找到 yiigridGridView,发现它有一个$columns属性可以配置,继而找到这个属性的类yiigridDataColumn,通过$filterInputOptions属性便可以自定义这个列的class了。这只是冰山一角,坑是永远填不完的,比如model中的行为是如何自动完成created_at和update_at的写入的呢?又是如何完成验证的呢?这些问题一个接一个。
基于这些使用经验,隐约感觉到Yii的强大,就像是一辆汽车每一个零部件可追溯。源于同事的推荐,发现一个神奇的网站,www.digpage.com看完它似醍醐灌顶,如此往复,任督二脉打通也指日可待。
二、基础指哪些以及它们之间的关联
Yii 基础指属性(Property),事件(Event),行为(Behavior)。
属性构成了一切对象的基础。在Yii中很常见的配置就是各种属性。
事件模型就是设计模式中的“观察者模式”:当对象的状态发生了变化,那么这个对象可以将该事件通知其它对象。
事件在Yii中无处不在,beforeSave(), afterSave(), beforeValidate(), afterValidate()... 一个请求周期中会触发n个事件,我们就可以利用这些事件搞事啦
行为可以将自己的属性和方法注入到要绑定的类中去,一个类还可以绑定多个行为,通过在行为中定义事件完成数据处理。
自动完成 created_at 和 update_at 就是使用了yiiehaviorsTimeStampBehavior, 这个行为继承自yiiehaviorsAttributeBehavior, 这个类中定义了要处理的两个事件beforeInsert(), beforeUpdate() 以及它们要触发的方法(方法里就是给created_at/updated_at赋值), 当一个模型使用了TimeStampBehavior就可以自动处理created_at/updated_at啦
三、事件/行为的应用场景
1. 我想在请求过来的时候,先将请求的 IP 的记录到数据库,然后才进行对应的相应的请求处理。
2. 当用户评论一篇文章时,可以触发一个评论对象添加(“add”)事件。
3. 邮件程序对象成功发出消息时可触发 messageSent 事件。如想追踪成功发送的消息,可以附加相应追踪代码到 messageSent 事件。
4. 用户登录成功后触发afterLogin事件。可以在该事件处绑定yii AfterLoginBehavior行为,更新用户信息
参考:Yii事件使用业务场景 http://www.jianshu.com/p/da4c3cfe55fa
其实行为的最终目地还是绑定事件,这里有一个很清晰的例子:场景是在后台,每个用户操作了什么(也就是访问了那个链接),都会记录日志
访问: https://yii-china.org/topic/740
还有其它的应用场景请留言帮助我完善这篇博文。
关于事件的触发/绑定,行为的定义/绑定/解除强烈推荐大家看《深入理解Yii2.0》