在Laravel 5.4中捕获单个Eloquent Model事件

时间:2017-04-14 13:25:31

标签: laravel events laravel-5

默认情况下,Laravel Eloquent模型会触发以下事件:'creating', 'created', 'updating', 'updated', 'deleting', 'deleted', 'saving', 'saved', 'restoring', 'restored'

我在AppServiceProvider中使用通配符侦听器使用Eloquent事件列表,如下所示:

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        \Event::listen(['eloquent.*'], function ($a){
            var_dump($a);
        });
    }

当我转储$a时,我什么都没得到。

我知道我们可以用可观察的方式捕捉事件。还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

回答这个问题可能有点迟,我更喜欢使用事件订阅者执行。

您还可以查看它:

  

https://laravel.com/docs/5.4/events#event-subscribers

您需要创建一个这样的事件订阅者:

<强> UserEventSubscriber.php     

namespace App\Listeners;

class UserEventSubscriber
{
    /**
     * Handle user created events.
     */
    public function onUserCreated($event)
    {
        //perform what you want to do after the user is created.
    }

    /**
     * Register the listeners for the subscriber.
     *
     * @param  Illuminate\Events\Dispatcher  $events
     */
    public function subscribe($events)
    {
        $events->listen(
            'eloquent.created: App\Users',
            'App\Listeners\UserEventSubscriber@onUserCreated'
        );
    }
}

现在在EventServiceProvider中注册您的事件监听器,它会监听从eloquent触发的每个用户创建的事件。

<强> EventServiceProvider.php     

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        //
    ];

    /**
     * The subscriber classes to register.
     *
     * @var array
     */
    protected $subscribe = [
        'App\Listeners\UserEventSubscriber',
    ];
}

在我看来,如果您想要添加与用户相关的多个事件,则不需要总是触摸ServiceProvider,这样会更加清晰。

希望它对你有所帮助。