Как работают events в laravel простым языком

Автор статьи: Web Redaction ©
Сайт Автора: https://6wd.ru/
E-mail Автора: info@6wd.ru
Дата публикации: 07.09.2023

В Laravel, события (events) предоставляют простой механизм реализации модели "наблюдатель-событие". Они позволяют вам реагировать на разные моменты или действия в вашем приложении. Давайте разберём это простым языком.

Представьте, что у вас есть радиоприёмник (это ваше приложение на Laravel). Каждая станция на этом радиоприёмнике представляет собой разное событие. Когда вы переключаетесь на определенную станцию (то есть, когда в вашем приложении происходит определенное событие), начинают играть песни (это слушатели, или listeners).

Теперь переводим это в контекст Laravel:

  1. Событие (Event): Это как конкретная радиостанция. Когда что-то происходит в вашем приложении (например, пользователь регистрируется), вы "настраиваетесь" на эту станцию или, другими словами, активируете событие.

  2. Слушатель (Listener): Это песни, которые играют, когда вы настраиваетесь на конкретную станцию. В контексте Laravel, когда активируется событие, слушатели "слышат" это и начинают выполнять определенный код. Например, когда пользователь регистрируется (активируется событие), слушатель может автоматически отправлять приветственное письмо (это действие слушателя).

Как это работает?

  1. Определение события: Вы создаете класс события, который содержит данные, связанные с этим событием.

  2. Определение слушателя: Вы создаете класс слушателя, который содержит логику или действия, которые нужно выполнить, когда событие активируется.

  3. Регистрация слушателя: В Laravel есть специальный файл EventServiceProvider, где вы сообщаете Laravel, какие слушатели должны реагировать на определенные события.

  4. Активация события: Когда в вашем приложении происходит что-то определенное (например, создание заказа), вы "активируете" соответствующее событие. Laravel затем уведомляет всех слушателей этого события.

  5. Обработка слушателем: Каждый слушатель, который "слушает" это событие, будет выполнен.

Давайте разберемся с примерами кода для событий (events) и слушателей (listeners) в Laravel

1. Определение события: 

Создаем новое событие с именем `UserRegistered`.

```bash
php artisan make:event UserRegistered
```

Это создает файл в директории `app/Events`. Ваш класс события может выглядеть примерно так:

```php
namespace App\Events;

use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
use App\Models\User;

class UserRegistered
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}
```

2. Определение слушателя:

Создаем слушателя для нашего события.

```bash
php artisan make:listener SendWelcomeEmail --event=UserRegistered
```

Слушатель будет в директории `app/Listeners`. Ваш слушатель может выглядеть так:

```php
namespace App\Listeners;

use App\Events\UserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;

class SendWelcomeEmail
{
    public function __construct()
    {
        //
    }

    public function handle(UserRegistered $event)
    {
        Mail::to($event->user)->send(new WelcomeEmail($event->user));
    }
}
```

3. Регистрация слушателя:

В `EventServiceProvider` регистрируем слушателя для нашего события:

```php
protected $listen = [
    UserRegistered::class => [
        SendWelcomeEmail::class,
    ],
];
```

4. Активация события:

Когда пользователь регистрируется, вы можете активировать событие следующим образом:

```php
event(new UserRegistered($user));
```

Теперь, когда это событие активировано, слушатель `SendWelcomeEmail` автоматически отправит приветственное письмо новому пользователю.

Это базовый обзор того, как работают события и слушатели в Laravel. Существует множество дополнительных возможностей, таких как очереди, широковещательные уведомления и многое другое, которые делают систему событий Laravel очень мощной.