Pankit Gami
Pankit Gami

Reputation: 2553

Capture the individual Eloquent Model event in Laravel 5.4

By Default, Laravel Eloquent model fires following events : 'creating', 'created', 'updating', 'updated', 'deleting', 'deleted', 'saving', 'saved', 'restoring', 'restored'

I am using listing for Eloquent events using wildcard listener in my AppServiceProvider like this :

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

I am getting nothing when I dump $a.

I know we can capture events with observable. Are there any other ways to do this?

Upvotes: 2

Views: 1364

Answers (1)

PaladiN
PaladiN

Reputation: 4944

This might be a little bit late to answer the question and i prefer to perform using the Event Subscriber.

You can also have a look over it:

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

You need to create a event subscriber like this:

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'
        );
    }
}

Now Register your event listener in the EventServiceProvider and it listens to every user created event fired from 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',
    ];
}

In my view this is a little bit cleaner way as you don't need to always touch your ServiceProvider if you want to add multiple events related to the user.

Hope it helps you.

Upvotes: 1

Related Questions