Пользовательские события в Laravel

Пользовательские события в Laravel

От автора: в этой статье мы рассмотрим основы того, как управляются в Laravel события. Это одна из важных функций, которые вы, как разработчик, должны иметь в своем арсенале. По мере продвижения мы также воспользуемся этой возможностью, чтобы создать реальный пример пользовательского события и обработчика, и это конечная цель этой статьи.

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

Например, скажите, что вы хотите уведомить все модули в системе, когда кто-то заходит на ваш сайт. Таким образом, он позволяет среагировать на это событие, будь то отправка электронной почты или уведомление в приложении или, что-то подобное, что среагирует на событие входа в систему.

Основы событий и обработчиков

В этом разделе мы рассмотрим способ Laravel для реализации событий и обработчиков в основном фреймворке. Если вы знакомы с архитектурой Laravel, вы, вероятно, знаете, что Laravel реализует концепцию поставщика услуг, которая позволяет вводить различные сервисы в приложение.

Аналогичным образом, Laravel предоставляет встроенный класс EventServiceProvider.php который позволяет определять отображения обработчика событий для приложения.

Вложим app/Providers/EventServiceProvider.php файл

Давайте внимательно рассмотрим свойство $listen , которое позволяет определить массив событий и связанных с ним обработчиков. Ключи массива соответствуют событиям в системе, и их значения соответствуют обработчикам, которые будут срабатывать, когда соответствующее событие будет поднято в системе.

Я предпочитаю рассматривать темы на реальном примере, чтобы продемонстрировать их. Как вы, вероятно, знаете, Laravel предоставляет встроенную систему аутентификации, которая облегчает такие функции, как вход в систему, регистрация и т.п.

Допустим, что вы хотите получить уведомление по электронной почте в качестве меры безопасности, когда кто-то войдет в приложение. Если Laravel не поддерживает функцию обработчика событий, возможно, вы закончили редактирование основного класса или каким-либо другим способом подключили код, который отправляет электронное письмо.

На самом деле, удача на вашей стороне, так как Laravel помогает вам решить эту проблему с помощью обработчика событий. Давайте проверим app/Providers/EventServiceProvider.php файл, чтобы он выглядел следующим образом.

Illuminate\Auth\Events\Login — это событие, которое будет поднято плагином Auth когда кто-то войдет в приложение. Мы связали это событие с обработчиком App\Listeners\SendEmailNotification, поэтому при регистрации он будет запущен.

Конечно, вам необходимо определить класс обработчика App\Listeners\SendEmailNotification . Как всегда, Laravel позволяет вам создать код шаблона обработчика, используя команду artisan.

Эта команда генерирует классы событий и обработчиков, перечисленные в $listen.

В нашем случае событие Illuminate\Auth\Events\Login уже существует, поэтому она создает класс обработчика App\Listeners\SendEmailNotification. Фактически, она в первую очередь создала бы класс событий Illuminate\Auth\Events\Login, если бы его не существовало.

Давайте посмотрим на класс обработчика, созданный в app/Listeners/SendEmailNotification.php.

Это метод handle который будет вызываться с соответствующими зависимостями всякий раз, когда слушаиель запускается. В нашем случае аргумент $event должен содержать контекстуальную информацию о регистрации в журнале событий пользовательской информации.

И мы можем использовать объект $event для дальнейшей обработки в методе handle . В нашем случае мы хотим отправить уведомление по электронной почте зарегистрированному пользователю.

Пересмотренный метод handle может выглядеть примерно так:

Вот как вы должны использовать функцию событий в Laravel. В следующем разделе мы продолжим работу и создадим настраиваемое событие и связанный с ним класс обработчика.

Создание пользовательского события

Примерный сценарий, который мы будем использовать для нашего примера, выглядит так:

Приложению необходимо чистить кэш в системе в определенные моменты. Во время чистки кэша мы поднимем событие CacheClear вместе с контекстной информациейи передадим групповые ключи кэша вместе с событием, которое было очищено.

Другие модули в системе могут ждать событие CacheClear и выполнять код, который нагревает связанные кэши

Давайте рассмотрим файл app/Providers/EventServiceProvider.php и зарегистрируем наши пользовательские события и обработчиков.

Как вы можете видеть, мы определили событие App\Events\ClearCache и связанный с ним класс обработчика App\Listeners\WarmUpCache под свойством $listen.

Затем нам нужно создать связанные файлы классов. Напомним, что вы всегда можете использовать команду artisan для генерации базового шаблона.

Это должно было создать класс события в app/Events/ClearCache.php и класс обработчика в app/Listeners/WarmUpCache.php.

С некоторыми изменениями класс app/Events/ClearCache.php должен выглядеть следующим образом:

Как вы, наверное, заметили, мы добавили новое свойство $cache_keys, которое будет использоваться для хранения информации, переданной вместе с событием. В нашем случае мы будем передавать групповой кэш, который был сброшен.

Давайте посмотрим на класс обработчика с обновленным методом handle в app/Listeners/WarmUpCache.php.

Когда вызывается обработчик, метод handle передается с экземпляром связанного события. В нашем случае это должен быть экземпляр события ClearCache который будет передан в качестве первого аргумента методу handle.

Далее просто вопрос итерации каждого ключа кэша и разгонки связанных кэшей.

Теперь у нас есть все, что нужно для проверки. Давайте быстро создадим файл контроллера в app/Http/Controllers/EventController.php, чтобы продемонстрировать, как можно поднять событие.

При создании экземпляра события ClearCache мы передали массив ключей кэша в качестве первого аргумента.

Вспомогательная функция события используется для создания события из любого места приложения. Когда событие поднимается, Laravel вызывает все обработчики наблюдением за конкретным событием.

В нашем случае App\Listeners\WarmUpCache настроен на наблюдение за App\Events\ClearCache . Таким образом, handle метод App\Listeners\WarmUpCache вызывает обработчик, когда событие возникает из контроллера. Остальное разогревает кэш, который был очищен!

Так можно создавать пользовательские события в своем приложении и работать с ними.

Что такое подписчик событий?

Подписчик события позволяет вам подписать несколько обработчиков событий в одном месте. Независимо от того, хотите ли вы логически группировать их или хотите содержать растущие события в одном месте, это подписчик событий, который вы ищете.

Если бы мы реализовали примеры, рассмотренные ранее в этой статье с использованием подписчика событий, то выглядело бы это так:

Метод subscribe отвечает за регистрацию обработчиков. Первый аргумент метода subscribe — это экземпляр класса Illuminate\Events\Dispatcher, который можно использовать для привязки событий к обработчикам с использованием метода listen.

Первый аргумент метода listen — это событие, которое вы хотите проследить, а второй аргумент — это обработчик, который будет вызываться при создании события.

Таким образом, вы можете определить несколько событий и обработчиков в самом классе подписчика. Класс подписчика события не будет загружен автоматически. Вам необходимо зарегистрировать его в классе EventServiceProvider.php под свойством $subscriber, как показано в следующем фрагменте.

Итак, это был класс подписчиков событий, и с ним мы достигли конца этой статьи.

Заключение

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

Автор: Sajal Soni

Источник: //code.tutsplus.com/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии (1)