Events Component
Компонент triangle/events предоставляет систему событий для реализации паттерна Observer.
Установка
composer require triangle/events
Конфигурация
Настройки в config/event.php:
return [
'listeners' => [
// Слушатели событий
],
];
Использование
Определение события
<?php
namespace App\Events;
class UserRegistered
{
public function __construct(
public $user
) {}
}
Слушатель события
<?php
namespace App\Listeners;
use App\Events\UserRegistered;
use Triangle\Events\ListenerInterface;
class SendWelcomeEmail implements ListenerInterface
{
public function handle(UserRegistered $event)
{
// Отправка приветственного письма
mail($event->user->email, 'Welcome!', 'Thanks for registering!');
}
}
Регистрация слушателя
В config/event.php:
return [
'listeners' => [
\App\Events\UserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
\App\Listeners\CreateUserProfile::class,
],
],
];
Генерация события
use Triangle\Events\Event;
use App\Events\UserRegistered;
// Генерация события
Event::dispatch(new UserRegistered($user));
// Или через вспомогательную функцию
event(new UserRegistered($user));
Примеры использования
Регистрация пользователя
<?php
namespace App\Controller;
use App\Events\UserRegistered;
use App\Model\User;
use Triangle\Engine\Request;
use Triangle\Events\Event;
class RegisterController
{
public function register(Request $request)
{
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
]);
// Генерация события
Event::dispatch(new UserRegistered($user));
return response()->json(['success' => true]);
}
}
Множественные слушатели
// config/event.php
return [
'listeners' => [
\App\Events\OrderCreated::class => [
\App\Listeners\SendOrderConfirmation::class,
\App\Listeners\UpdateInventory::class,
\App\Listeners\NotifyAdmin::class,
],
],
];
Вспомогательные функции
// Генерация события
event(new UserRegistered($user));
// Проверка наличия слушателей
if (Event::hasListeners(UserRegistered::class)) {
// ...
}