Notifications

Introduction

Notifications are a great way to inform your users of things that are happening in your application. For example, you might use a notification to let a user know when a team member has completed a given to-do list task. These notifications are viewable by clicking on the "notification bell" icon in the application's navigation bar. The notification bell will have an unread count indicator when there are unread announcements or notifications.

Creating Notifications

To create a notification, inject the Laravel\Spark\Contracts\Repositories\NotificationRepository into your controller or any other class which is being resolved by the Laravel service container:

use Laravel\Spark\Contracts\Repositories\NotificationRepository;

public function __construct(NotificationRepository $notifications)
{
    $this->notifications = $notifications;
}

Then, you may use the create method to create the notification:

$this->notifications->create($user, [
    'icon' => 'fa-users',
    'body' => 'A team member completed a task!',
    'action_text' => 'View Task',
    'action_url' => '/link/to/task',
]);

The action_text and action_url attributes are optional so you do not need to pass them in order to create a notification. However, providing these attributes will create a button on the notification where the user can be directed to some other location for information relevant to the notification.

When a notification is created, Spark will fire the Laravel\Spark\Events\NotificationCreated event, which your application can listen for to do work after a notification is created.

Sending Laravel Notifications

Note: Before using this feature, check out the Laravel notification documentation.

Spark also allows you to send notifications using the Laravel \notification system. To create a notification, you may use the following Artisan command:

php artisan make:notification TaskCompleted

This command will place a fresh notification in your app/Notifications directory. You may add the notification to Spark's notification table by specifying the SparkChannel channel in your notification's via method. The SparkChannel may be thought of as a replacement to Laravel's default database channel:

use Laravel\Spark\Notifications\SparkChannel;

public function via($notifiable)
{
    return [SparkChannel::class];
}

Formatting Notifications

Before using the SparkChannel, you should define a toSpark method on the notification class. This method will receive a $notifiable entity and should return a SparkNotification object:

use Laravel\Spark\Notifications\SparkNotification;

public function toSpark($notifiable)
{
    return (new SparkNotification)
                  ->action('View Task', '/link/to/task')
                  ->icon('fa-users')
                  ->body('A team member completed a task!');
}

Sending Notifications

Notifications may be sent in two ways: using the notify method of the Notifiable trait or by using the Notification facade. You may take a look at the Laravel notification documentation to get more details regarding these two approaches to sending notifications.

Here's an example of sending notifications to a Spark user using the notify method:

$user->notify(new TaskCompleted);

When sending a notification to a team, all members of that team will be notified:

$team->notify(new TaskCompleted);