Laravel 4 как слушать модельное событие?
Я хочу привязать прослушиватель событий к событию модели updating
.
Например, после того, как сообщение обновлено, появляется предупреждение, уведомляющее обновленный заголовок сообщения, как написать прослушиватель событий для уведомления (с сообщением заголовка сообщения, передаваемым слушателю?
Ответы
Ответ 1
В документации кратко упоминается События модели. У всех есть вспомогательная функция на модели, поэтому вам не нужно знать, как они построены.
Элегантные модели запускают несколько событий, позволяя вам подключаться к различным точкам жизненного цикла модели, используя следующие методы: создание, создание, обновление, обновление, сохранение, сохранение, удаление, удаление. Если ложь возвращается из создания, обновления, сохранения или удаления событий, действие будет отменено.
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
Этот пост:
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 поделился в своем ответе, может быть применен к отдельным модулям.
Ответ 3
Я застрял в этом, потому что предположил, что подписывался на модели по умолчанию, такие как 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)....
Ответ 4
Event::listen('eloquent.created: ModelName', function(ModelName $model) {
//...
})