События и слушатели в Laravel представляют собой мощный механизм для реализации шаблона проектирования "Публикация-подписка" (Publish-Subscribe), позволяя вашему приложению реагировать на различные события, происходящие в системе. В этом обзоре мы рассмотрим, как создать и использовать события и слушатели в Laravel.
1. Создание события
События в Laravel представляют собой классы, которые содержат информацию о событии, которое произошло. Чтобы создать событие, используйте команду make:event
:
php artisan make:event OrderShipped
Это создаст класс OrderShipped
в директории app/Events
. В этом классе вы можете определить данные, которые будут переданы слушателям:
<?php
namespace App\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderShipped
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $order;
public function __construct($order)
{
$this->order = $order;
}
}
2. Создание слушателя
Слушатели в Laravel представляют собой классы, которые содержат логику, реагирующую на события. Чтобы создать слушателя, используйте команду make:listener
:
php artisan make:listener SendShipmentNotification --event=OrderShipped
Это создаст класс SendShipmentNotification
в директории app/Listeners
. В этом классе вы можете определить метод handle
, который будет вызван при возникновении события:
<?php
namespace App\Listeners;
use App\Events\OrderShipped;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
class SendShipmentNotification implements ShouldQueue
{
use InteractsWithQueue;
public function handle(OrderShipped $event)
{
// Логика отправки уведомления
}
}
3. Регистрация слушателя
Чтобы связать событие с слушателем, добавьте слушателя в массив listen
в файле app/Providers/EventServiceProvider.php
:
protected $listen = [
\App\Events\OrderShipped::class => [
\App\Listeners\SendShipmentNotification::class,
],
];
4. Отправка события
Чтобы отправить событие, используйте метод event
:
event(new OrderShipped($order));
5. Очередь слушателей
Если ваш слушатель реализует интерфейс ShouldQueue
, Laravel автоматически поместит его в очередь для асинхронной обработки. Убедитесь, что у вас настроен и запущен очередире, чтобы использовать эту функцию.
Заключение
События и слушатели в Laravel предоставляют мощный и гибкий способ реализации шаблона проектирования "Публикация-подписка", позволяя вашему приложению реагировать на различные события, происходящие в системе. Это позволяет вам легко расширять функциональность вашего приложения, добавляя новые обработчики событий без изменения основного кода.
0 комментариев