Skip to main content

Command Palette

Search for a command to run...

Laravel - Notification & Events

Updated
2 min read
Laravel - Notification & Events
M

Mohamad's interest is in Programming (Mobile, Web, Database and Machine Learning). He is studying at the Center For Artificial Intelligence Technology (CAIT), Universiti Kebangsaan Malaysia (UKM).

This post refers to Laravel BootCamp tutorial.

For example, a notification task.

Create a notification task via php artisan command:

php artisan make:notification NewChirp

Define the toMail method:

(app\notifications\newchirp.php)

    public function toMail(object $notifiable): MailMessage
    {
        return (new MailMessage)
                    ->subject("New Chirp from {$this->chirp->user->name}")
                    ->greeting("New Chirp from {$this->chirp->user->name}")
                    ->line(Str::limit($this->chirp->message, 50))
                    ->action('Go to Chirper', url('/'))
                    ->line('Thank you for using our application!');
    }

[2] Create an Event

Create an event task via php artisan command:

php artisan make:event ChirpCreated

Update the ChirpCreated event to accept the newly created Chirp ($chirp) so that it can be passed to the notification task (NewChirp):

(app/Events/ChirpCreated.php)

    public function __construct(public Chirp $chirp)
    {
        //
    }

[3] Dispatch Event

Events can be dispatched anywhere in the application lifecycle.

In this example, the event will be dispatched from the Chirp Model.

Notice that the statement contains an array which means that there could be more than one event that can be dispatched altogether.

(app/Models/Chirp.php)

    protected $dispatchesEvents = [
        'created' => ChirpCreated::class,
    ];

[4] Create Event Listener

Create an event task via php artisan command:

php artisan make:listener SendChirpCreatedNotifications --event=ChirpCreated

Update the listener to send notifications.

(app/Listeners/SendChirpCreatedNotifications.php)

    public function handle(ChirpCreated $event): void
    {
        //
        foreach (User::whereNot('id', $event->chirp->user_id)->cursor() as $user) {
            $user->notify(new NewChirp($event->chirp));
        }
    }

[5] Register Event Listener

(App\Providers\EventServiceProvider.php)

    protected $listen = [
        ChirpCreated::class => [
            SendChirpCreatedNotifications::class,
        ],
         ...
    ];

References:

https://laravel.com/docs/10.x/events

https://laravel.com/docs/10.x/notifications

https://bootcamp.laravel.com/blade/notifications-and-events