Повний посібник з програмування на основі подій у Laravel 11 за допомогою подій та слухачів (Event Listeners) [2025].

Подієво-орієнтоване програмування — це спосіб написання коду, де програма виконується залежно від того, що відбувається в системі.

Події можуть бути будь-якими діями в системі, наприклад, коли користувач натискає на щось або відправляє форму, або коли відбуваються зміни в системі, як-от завантаження файлу чи оновлення бази даних.

Замість того, щоб код виконувався в порядку, програма реагує на ці події, виконуючи певні шматки коду, які називаються обробниками подій або слухачами (listeners).

Це ідеально підходить для інтерактивних додатків, реальних систем і розподілених архітектур, тому що події діють як тригери, а програма реагує динамічно.

Події в Laravel пропонують просте впровадження патерну спостерігача (observer), дозволяючи користувачам підписуватись і моніторити різні події в додатку.

Події зазвичай зберігаються в директорії app/Events, тоді як їхні слухачі (listeners) — в директорії app/Listeners. Не потрібно хвилюватись про видимість цих директорій під час ініціалізації додатку, оскільки вони будуть згенеровані автоматично, коли події і слухачі будуть створюватись за допомогою команд Artisan.

Цей посібник проведе вас крок за кроком через процес створення, налаштування і використання подій і слухачів (Event Listeners) у Laravel 11, щоб ви могли бути впевненими, що робите все правильно в своїх наступних проектах на Laravel.

1. Потужність подій і слухачів у Laravel 11

Подієво-орієнтований підхід в Laravel є ідеальним рішенням для ситуацій, коли потрібно виконати певні дії на основі конкретних подій. Ось кілька чудових прикладів:

  • Надсилання привітального листа після реєстрації користувача.
  • Логування активності користувача.
  • Сповіщення в реальному часі.
  • Обробка завдань, що виконуються в фоновому режимі, таких як завантаження файлів чи обробка даних.

Події та слухачі (Event Listeners) корисні, коли ми хочемо відокремити логіку для "що відбудеться" (подія) і "що і як на це відреагувати" (слухач або обробник події).

З подіями та слухачами (Event Listeners) ми можемо легко викликати кілька слухачів для однієї події та додавати нових слухачів без зміни основної логіки додатку.

У наступних розділах цієї статті ми детально розглянемо, як використовувати подієво-орієнтований механізм в Laravel 11.

Давайте разом застосуємо цей практичний приклад:

  • Подія: Коли користувач реєструється, ми створимо подію UserAdded.
  • Слухач (Event Listener): Надіслати привітальний лист новому зареєстрованому користувачу.

2. Створення подій у Laravel 11

Крок 1: Генерація подій

Якщо вам потрібно швидко створювати події та слухачів, ви можете скористатися командою make:event Artisan.

Запустіть наступну команду Artisan, щоб створити подію:

php artisan make:event UserAdded

Ви можете викликати make:event без додаткових аргументів, якщо вам це потрібно. Коли ви це робите, Laravel автоматично запитає у вас ім’я класу.

Крок 2: Опис подій

Події — це як маленькі контейнери для даних. Вони є місцем, де зберігається вся інформація про подію. Ось приклад: скажімо, що подія App\Events\UserAdded отримує об’єкт Eloquent ORM:

pic

Знімок коду з описом події

Ми додали User $user в конструктор, щоб зберігати переданого користувача в події, використовуючи типізований параметр, який вказує, що параметр $user має бути екземпляром класу User.

У Laravel Dispatchable трейтом (trait) є вашим найкращим другом, коли йдеться про полегшення створення та відправлення подій, завдань і задач.
Це схоже на вашого особистого помічника, завжди готового допомогти за допомогою свого зручного методу dispatch().

Тепер давайте глибше зануримось у цю дивовижну можливість.

Що робить Dispatchable?

Трейт Dispatchable робить процес:

  • Ініціалізації та відправлення події в один крок дуже простим.
  • Покращує читабельність вашого коду.
  • Безшовно обробляє асинхронне або синхронне відправлення.

SerializesModels:

Трейт SerializesModels, який використовується в події, є надзвичайно корисним! Він елегантно серіалізує будь-які моделі Eloquent для вас.

У Laravel серіалізація моделі Eloquent — це як зробити знімок стану моделі. Цей знімок потім зберігається, відправляється або обробляється з легкістю. Зазвичай це означає перетворення моделі в простий рядок або акуратний масив даних. Серіалізований формат можна використовувати в черзі, кеші або базі даних, і потім дані можна відновити до початкової форми.

InteractsWithSockets:

Функціональність трейту InteractsWithSockets проста: він надає необхідні методи для роботи з WebSockets. Він використовується для відправлення подій користувачам та для прослуховування і надсилання повідомлень через з'єднання WebSockets.

Перш ніж перейти до оголошення та реалізації події, спершу потрібно створити контролер для обробки реєстрації користувача та відправки пов'язаної події.

Крок 3: Створення RegistrationController

Щоб явно створити контролер у Laravel, використовуйте наступну команду artisan.

php artisan make:controller RegistrationController

Далі додайте код нижче до методу реєстрації в контролері RegistrationController:

pic

Знімок коду контролера в Laravel 11

Ми все ще можемо експериментувати з логікою, пропустивши User::create та уникнути бази даних, щоб уникнути винятків у майбутньому. Але для того, щоб додаток працював безперешкодно, налаштуйте та підключіть свій сервер бази даних належним чином для реєстрації користувача в таблиці Users.

P.S. Модель User створюється одразу після налаштування нового проекту Laravel.

Laravel підтримує багато баз даних, але для цього демо я буду використовувати SQLite, але ви можете використовувати будь-яку іншу базу даних, яка підходить для вас.

Щоб налаштувати вашу базу даних, перейдіть до файлу .env і налаштуйте ваші облікові дані бази даних.

DB_CONNECTION=sqlite

Бази даних SQLite знаходяться в одному файлі на вашій файловій системі. Ви можете створити нову базу даних SQLite за допомогою команди touch у вашому терміналі або вручну:

touch database/database.sqlite

У Windows:

echo > database/database.sqlite

3. Створення слухачів (Event Listeners)

У Laravel слухачі (Event Listeners) — це як наші вірні помічники, які обробляють усі тонкощі того, що відбувається, коли відбувається щось важливе. Коли подія ініціюється, наші слухачі (Event Listeners) вступають в дію, виконуючи все необхідне, щоб надіслати привітальний лист, зафіксувати важливі деталі або оновити базу даних.

Давайте зануримося і подивимося, як створити та використовувати ці потужні слухачі (Event Listeners) в Laravel, починаючи з створення слухача, який надсилає привітальний лист, коли користувач реєструється.

Крок 1: Генерація слухача (Event Listener)

Ви можете створити слухача (Event Listener) у Laravel, використовуючи Artisan, інструмент командного рядка Laravel. Для цього виконайте команду make:listener, яка згенерує новий клас слухача (Event Listener).

Щоб почати, просто виконайте наступну команду у вашому терміналі:

php artisan make:listener SendWelcomeEmail

Ця команда створить файл слухача (Event Listener) з назвою SendWelcomeEmail.php в директорії app/Listeners.

Крок 2: Огляд класу слухача (Event Listener)

Після виконання команди Artisan ви побачите, що Laravel створив новий клас слухача (Event Listener) в app/Listeners/SendWelcomeEmail.php. Ось як зазвичай виглядає цей клас:

pic

Знімок коду слухача в Laravel 11

У Laravel є інтерфейс під назвою ShouldQueue. Це інтерфейс, який ви можете використовувати в різних місцях, таких як слухач (Event Listener), завдання або подія.
Що це робить, так це дозволяє вам сказати системі, що для певної дії краще обробити її у фоновому режимі, а не виконувати негайно.

Тому вам потрібно запустити обробку черги.

php artisan queue:work

Якщо ви хочете, щоб обробник подій (Event Handler) обробляв дію негайно, просто видаліть інтерфейс “implements ShouldQueue”.

З іншого боку, функція Handle містить логіку, яку потрібно виконати, коли подія ініціюється.

$event->user: Отримує екземпляр користувача, переданий до події і збережений в публічному властивості user.

4. Конфігурація пошти

Крок 1: Генерація WelcomeMail mailable

Mailable — це клас, що представляє електронний лист, який можна надіслати за допомогою поштової системи Laravel. З Mailable ви можете визначити вміст своїх листів (наприклад, тему, текст і отримувачів) і надсилати їх за допомогою різних поштових служб доставки, таких як SMTP, Mailgun і Postmark.

Поштову систему Laravel побудовано навколо класу Mailable, що спрощує відправку електронних листів, надаючи чистий, виразний API. Цей підхід також підтримує більш просунуті функції, такі як вкладення, шаблони Markdown і динамічний вміст у листах.

Як створити Mailable:

Створіть клас Mailable за допомогою команди Artisan. Ось як створити Mailable:

php artisan make:mail WelcomeEmail

Ця команда згенерує новий клас Mailable в директорії app/Mail. Згенерований клас може виглядати так:

pic

WelcomeMail mailable

Далі я створив папку “mails” в директорії “views”. Потім я створив простий шаблон листа “welcome-mail.blade.php” і передав його класу Content для рендерингу вмісту листа.

pic

welcome-mail.blade.php простий шаблон листа

Ви можете налаштувати поштові сервіси Laravel через файл конфігурації вашого додатка config/mail.php.

Для цього демо та тестування я використовую поштову службу Mailtrap. Ви також можете використовувати стандартний поштовий драйвер Laravel, щоб писати всі свої електронні листи у файли журналів для перегляду. Цей драйвер зазвичай використовується лише під час локальної розробки.

У вашому файлі конфігурації пошти ви знайдете масив конфігурації mailers. Цей масив має зразок налаштування для кожного з основних поштових драйверів/транспортів, які підтримує Laravel, а значення за замовчуванням визначає, який поштовий драйвер буде використовуватися за замовчуванням, коли ваш додаток повинен надіслати електронний лист.

Перш за все, вам потрібно створити акаунт у Mailtrap та скопіювати ваші облікові дані в файл .env, як показано нижче:

pic

Конфігурація Mailtrap у файлі .env

5. Реєстрація подій та слухачів (Event Listeners)

У Laravel 11 є три способи реєстрації подій та їх слухачів (Event Listeners): автоматичне виявлення подій, ручна реєстрація та слухачі замикання (Closure Listeners).

P.S: ви повинні вибрати лише один спосіб, щоб уникнути множинного виконання подій.

Автоматичне виявлення подій: Laravel дуже корисний! Він автоматично знаходить і реєструє ваші слухачі подій (Event Listeners), скануючи директорію Listeners вашого додатка. Якщо він знаходить метод класу слухача, який починається з “handle” або “__invoke”, він реєструє ці методи як слухачі подій для події, тип якої вказано в сигнатурі методу.

pic

Функція handle в слухачі (Event Listener) SendWelcomeEmail в Laravel 11

Ручна реєстрація подій: Ви можете вручну зареєструвати події та їх відповідні слухачі (Event Listeners) у методі boot вашого AppServiceProvider, використовуючи фасад Event.

pic

Реєстрація подій та слухачів (Event Listeners) в AppServiceProvider

Слухачі замикання (Closure Listeners): Ви помітите, що слухачі (Event Listeners) зазвичай визначаються як класи.
Однак, ви також можете вручну зареєструвати слухачів подій (Event Listeners), що використовують замикання (closure), в методі boot вашого AppServiceProvider.

pic

Closure Listeners у AppServiceProvider

6. Тестування

Тепер давайте протестуємо це, щоб переконатися, що все налаштовано правильно. Я надав примітивну форму реєстрації користувача у форматі blade, яку ви можете скопіювати до вашого демонстраційного проекту:

pic

Blade файл форми реєстрації користувача

7. Головна ідея

Модель програмування на основі подій Laravel з подіями та слухачами (Event Listeners) — це справжній прорив. Вона допомагає розділяти логіку додатка та ефективно масштабувати систему.

Незалежно від того, чи потрібно вам надсилати сповіщення, обробляти завдання у фоновому режимі або транслювати оновлення в реальному часі, події та слухачі (Event Listeners) пропонують чисте, повторно використовуване та підтримуване рішення.

Дотримуючись цього посібника, ви тепер маєте знання для ефективного створення та управління подіями та слухачами (Event Listeners) у Laravel 11. 🚀

Перекладено з: A complete guide to event-driven programming in Laravel 11 using events and listeners [2025].

Leave a Reply

Your email address will not be published. Required fields are marked *