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)   {
    //...
})