请教行为的问题,谢谢各位。 [ 2.0 版本 ]
大家好,使用yii已经一段时间了,关于行为仍然不能理解。 当然根本原因是因为php很菜,所以希望各位朋友多多指导,谢谢。
比如 yiicihna的 回帖提醒原作者的功能
假设有Controller:answerController
,其中有方法actionNew
。
假设有model:Message
。
请问如何通过“行为”来实现,每次帖子有了新回复,就发信息提醒原作者呢?
深入理解Yii2.0 » Yii 基础 » 行为(Behavior) 这篇看了很久,还是不明白。只好来求助各位朋友了。如果可以请给一个实现上方需求的最简单的例子。谢谢。
共 1 个回答
-
关于“行为”,建议你参考下这篇文章先了解下Mixin:http://www.cnblogs.com/snandy/archive/2013/05/24/3086663.html
Yii2 里面的 behavior 其实就是 Mixin 模式的一种实践,它的主要目的在于给一个类添加另外一个类的功能,其实是多重继承的一种方式。
开始考虑觉得你的需求不适用 Mixin 模式,但是,仔细考虑下,还是可以用 behavior 以达到解耦的目的。
仔细考虑了下,你的需求用 behavior 实现的大致思路如下:
假设有 Model: Message,Comment。我们实现一个SendMessageBehavior 如下:
class SendMessageBehavior extends Behavior { public function events() { [ BaseActiveRecord::EVENT_AFTER_INSERT => "doSend", ] } public function doSend() { //执行Message::send方法 Message::send($this->owner); } }
将这个behavior绑定到 Comment 上面,以处理 EVENT_AFTER_INSERT 事件。
class Comment extend ActiveRecord { public function behaviors() { return [ SendMessageBehavior::className(), ]; } }
其思路就是在有新的评论时(comment 表的 insert 事件 ),执行 message::send方法。
共 2 条回复1.请问,行为不是非常适合的话,应该从那个角度来考虑呢? 事件?
2.看了你的例子,大概明白一点了,可是如果我需要在某个特定的update方法下绑定这个行为呢?,比如我有一个新的方法,actionUpdateName(),这时如果使用EVENT_AFTER_UPDATE这个event显然就不合适了。那会造成所有的update动作都去触发doSend方法。是需要自定义一个EVENT对吧?EVENT_AFTER_UPDATE_NAME = 'afterUpdateName'; //然后 如何触发?如何处理?
提得问题都是因为php基础差,十分抱歉。php手册,一直在非常方便打开的地方,现在的阶段是大概入了点门,自己尝试写点东西,然后就很多很多问题,这个阶段过去,必然把手册在好好的看几遍,这个过程遇到你,还请你多给点耐心,谢谢。
PS,我很多问题都是你非常详细、专业回答的,很感动。真希望能做点什么。。。目前的水平也就是能出点苦力。但真心希望能做点什么。
xjdata
最后登录:2024-05-05
在线时长:112小时38分
- 粉丝23
- 金钱14169
- 威望75
- 积分16039