На 15-ом уроке мы рассмотрим один из самых мощных инструментов Laravel, это события и слушатели.
Если вы когда-нибудь задумывались, как сделать ваше приложение гибким и легко расширяемым, то события нужно понять и изучить. Они позволяют разделять логику приложения, делая код чище и поддерживаемее. В этом уроке я покажу, как создавать события, регистрировать слушатели, отправлять уведомления и работать с очередями.
Что такое события?
События (Events) в Laravel это способ реагировать на определенные действия в вашем приложении. Например:
- Пользователь зарегистрировался → отправить приветственное письмо.
- Статья опубликована → уведомить подписчиков.
- Заказ оформлен → обновить складские остатки.
Преимущества событий:
- Декомпозиция кода. Логика разбивается на независимые части.
- Гибкость. Можно добавлять новые обработчики без изменения существующего кода.
- Масштабируемость. События легко интегрируются с очередями для асинхронной обработки.
Создание событий
События в Laravel это обычные PHP-классы. Давайте создадим событие UserRegistered
, которое будет вызываться после регистрации пользователя.
Шаг 1: Генерация события
Откройте терминал и выполните:
php artisan make:event UserRegistered
В папке app/Events
появится файл UserRegistered.php
.
Шаг 2: Редактирование события
Добавим пользователя в конструктор, чтобы передать его данные в слушатели:
<?php
namespace App\Events;
use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserRegistered
{
use Dispatchable, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
Регистрация слушателей
Слушатели (Listeners) это классы, которые реагируют на события. Например, слушатель SendWelcomeEmail
отправит письмо при регистрации.
Шаг 1: Создание слушателя
Выполните команду:
php artisan make:listener SendWelcomeEmail --event=UserRegistered
Файл SendWelcomeEmail.php
будет создан в app/Listeners
.
Шаг 2: Регистрация в провайдере
Откройте app/Providers/EventServiceProvider.php
и добавьте связь события и слушателя:
protected $listen = [ UserRegistered::class => [ SendWelcomeEmail::class, ], ];
Шаг 3: Реализация слушателя
Допишем логику отправки письма:
<?php
namespace App\Listeners;
use App\Events\UserRegistered;
use App\Mail\WelcomeEmail;
use Illuminate\Support\Facades\Mail;
class SendWelcomeEmail
{
public function handle(UserRegistered $event)
{
Mail::to($event->user->email)->send(new WelcomeEmail($event->user));
}
}
Пример: отправка уведомления при регистрации
Давайте закрепим знания на примере.
Шаг 1: Вызов события
В контроллере регистрации вызовите событие:
use App\Events\UserRegistered; public function register(Request $request) { // ... код регистрации ... $user = User::create($request->validated()); event(new UserRegistered($user)); return redirect('/home'); }
Шаг 2: Создание письма
Сгенерируйте mailable-класс:
php artisan make:mail WelcomeEmail
Реализуйте содержимое письма в app/Mail/WelcomeEmail.php
:
public function build() { return $this->view('emails.welcome') ->with(['user' => $this->user]); }
Очереди и отложенная обработка
Если задача требует времени (например, отправка тяжелых файлов), ее можно вынести в очередь.
Шаг 1: Настройка очередей
В .env
укажите драйвер (например, Redis или database):
QUEUE_CONNECTION=database
Создайте таблицу для очередей:
php artisan queue:table php artisan migrate
Шаг 2: Отправка в очередь
Измените слушатель SendWelcomeEmail
, чтобы он реализовывал интерфейс ShouldQueue
:
use Illuminate\Contracts\Queue\ShouldQueue; class SendWelcomeEmail implements ShouldQueue { // ... }
Теперь при вызове события отправка письма будет выполняться асинхронно.
Шаг 3: Запуск обработчика очередей
php artisan queue:work
Практические задания
- Создайте событие
ArticlePublished
, которое срабатывает при публикации статьи. - Добавьте слушатель для отправки уведомления администратору.
- Интегрируйте очередь для отложенной отправки.
Пример кода для задания 1:
// Событие php artisan make:event ArticlePublished // Слушатель php artisan make:listener NotifyAdmin --event=ArticlePublished
Итоги 15-го урока
Сегодня мы разобрали, как события и слушатели делают код чище, а приложение гибким. Вы научились:
- Создавать события.
- Регистрировать слушатели.
- Работать с очередями.
Полный курс с уроками по Laravel для начинающих по ссылке https://max-gabov.ru/laravel-dlya-nachinaushih