我希望事件监听器与模型事件updating
绑定
例如,在帖子更新后,会有一个警告通知更新的帖子标题,如何编写事件监听器以通知(帖子标题值传递给听众?
答案 0 :(得分:36)
这篇文章: http://driesvints.com/blog/using-laravel-4-model-events/
显示如何使用模型中的“boot()”静态函数设置事件侦听器:
class Post extends eloquent {
public static function boot()
{
parent::boot();
static::creating(function($post)
{
$post->created_by = Auth::user()->id;
$post->updated_by = Auth::user()->id;
});
static::updating(function($post)
{
$post->updated_by = Auth::user()->id;
});
}
}
@ phill-sparks在他的回答中分享的事件列表可以应用于各个模块。
答案 1 :(得分:18)
文档简要提到了Model Events。他们都在模型上有一个辅助函数,所以你不需要知道它们是如何构造的。
Eloquent模型会触发多个事件,允许您使用以下方法挂钩模型生命周期中的各个点:创建,创建,更新,更新,保存,保存,删除,删除。如果从创建,更新,保存或删除事件返回false,则操作将被取消。
Project::creating(function($project) { }); // *
Project::created(function($project) { });
Project::updating(function($project) { }); // *
Project::updated(function($project) { });
Project::saving(function($project) { }); // *
Project::saved(function($project) { });
Project::deleting(function($project) { }); // *
Project::deleted(function($project) { });
如果您从标记为false
的函数返回*
,那么他们将取消操作。
有关详细信息,您可以查看Illuminate/Database/Eloquent/Model,然后您会在其中找到所有活动,查找static::registerModelEvent
和$this->fireModelEvent
的使用情况。
Eloquent模型上的事件结构为eloquent.{$event}: {$class}
,并将模型实例作为参数传递。
答案 2 :(得分:7)
我坚持这个因为我假设订阅了默认模型事件,比如Event:listen(' user.created',function($ user))会有效(正如我在评论中所说)。所以我已经看到这些选项在默认模型用户创建事件的示例中起作用:
//This will work in general, but not in the start.php file
User::created(function($user)....
//this will work in the start.php file
Event::listen('eloquent.created: User', function($user)....
答案 3 :(得分:0)
Event::listen('eloquent.created: ModelName', function(ModelName $model) {
//...
})