Команда make:event
Команда make:event создаёт новый класс события в директории app/Events. События используются для уведомления различных частей приложения о том, что произошло определённое действие. Класс события обычно содержит информацию о произошедшем действии, которая передаётся слушателям.
Синтаксис
php artisan make:event EventName
Где EventName - имя создаваемого класса события в формате CamelCase. По умолчанию класс создаётся в пространстве имён App\Events.
Пример
Создадим событие для случая, когда пользователь регистрируется в системе:
<?php
namespace App\Events;
use App\Models\User;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserRegistered
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
В данном примере мы создаём событие UserRegistered, которое принимает модель пользователя через конструктор. Это позволяет передавать данные о пользователе слушателям события.
Пример
Создадим событие с дополнительными данными для заказа:
<?php
namespace App\Events;
use App\Models\Order;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderShipped
{
use Dispatchable, SerializesModels;
public $order;
public $shippingDate;
public function __construct(Order $order, $shippingDate)
{
$this->order = $order;
$this->shippingDate = $shippingDate;
}
}
Это событие содержит информацию о заказе и дате отправки. Все публичные свойства класса будут доступны слушателям.
Пример
Создадим событие с использованием интерфейса ShouldBroadcast для реализации веб-сокетов:
<?php
namespace App\Events;
use App\Models\User;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class MessageSent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public $message;
public function __construct(User $user, $message)
{
$this->user = $user;
$this->message = $message;
}
public function broadcastOn()
{
return new Channel('chat');
}
public function broadcastAs()
{
return 'message.sent';
}
}
В этом примере событие реализует интерфейс ShouldBroadcast, что позволяет транслировать его через веб-сокеты. Метод broadcastOn определяет канал вещания, а broadcastAs - имя события на клиентской стороне.
Пример
Теперь создадим слушатель для нашего события и зарегистрируем его в провайдере:
<?php
namespace App\Providers;
use App\Events\UserRegistered;
use App\Listeners\SendWelcomeEmail;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
UserRegistered::class => [
SendWelcomeEmail::class,
],
];
}
Регистрация события в свойстве listen связывает событие UserRegistered со слушателем SendWelcomeEmail. Когда событие будет вызвано, все зарегистрированные слушатели получат уведомление.
Смотрите также
-
команда
make:listener,
которая создаёт слушатель для событий -
команда
make:job,
которая создаёт задачу для очереди -
команда
make:mail,
которая создаёт класс для отправки почты -
команда
make:notification,
которая создаёт уведомление