РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
981 of 1392 menu

Метод subscribe

Метод subscribe применяется к экземпляру класса Event и позволяет зарегистрировать подписчика событий. Подписчик - это класс, который содержит методы для обработки различных событий. Первым параметром передаётся класс подписчика, вторым (необязательным) - метод, который возвращает массив событий и их обработчиков.

Синтаксис

<?php Event::subscribe($subscriber); ?>

Пример

Создадим подписчик для обработки событий модели User:

<?php namespace App\Listeners; use App\Events\UserCreated; use App\Events\UserUpdated; use App\Events\UserDeleted; class UserEventSubscriber { public function handleUserCreated($event) { echo "User created: " . $event->user->name; } public function handleUserUpdated($event) { echo "User updated: " . $event->user->name; } public function handleUserDeleted($event) { echo "User deleted: " . $event->user->name; } public function subscribe($events) { return [ UserCreated::class => 'handleUserCreated', UserUpdated::class => 'handleUserUpdated', UserDeleted::class => 'handleUserDeleted', ]; } } ?>

Пример

Зарегистрируем подписчика в методе boot класса EventServiceProvider:

<?php namespace App\Providers; use Illuminate\Support\Facades\Event; use Illuminate\Support\ServiceProvider; use App\Listeners\UserEventSubscriber; class EventServiceProvider extends ServiceProvider { public function boot() { Event::subscribe(UserEventSubscriber::class); } } ?>

Пример

Теперь при создании пользователя будет вызван метод handleUserCreated подписчика:

<?php namespace App\Http\Controllers; use App\Models\User; use App\Events\UserCreated; class UserController extends Controller { public function store() { $user = new User(); $user->name = 'John Doe'; $user->email = 'john@example.com'; $user->save(); event(new UserCreated($user)); return response()->json(['message' => 'User created']); } } ?>

Результат выполнения кода при создании пользователя:

"User created: John Doe"

Пример

Вместо метода subscribe в подписчике можно использовать свойство subscribe, которое будет содержать массив соответствий событий и методов:

<?php namespace App\Listeners; use App\Events\OrderPlaced; use App\Events\OrderShipped; use App\Events\OrderDelivered; class OrderEventSubscriber { public $subscribe = [ OrderPlaced::class => 'onOrderPlaced', OrderShipped::class => 'onOrderShipped', OrderDelivered::class => 'onOrderDelivered', ]; public function onOrderPlaced($event) { echo "Order placed: #" . $event->order->id; } public function onOrderShipped($event) { echo "Order shipped: #" . $event->order->id; } public function onOrderDelivered($event) { echo "Order delivered: #" . $event->order->id; } } ?>

Регистрация такого подписчика выполняется аналогично:

<?php namespace App\Providers; use Illuminate\Support\Facades\Event; use Illuminate\Support\ServiceProvider; use App\Listeners\OrderEventSubscriber; class EventServiceProvider extends ServiceProvider { public function boot() { Event::subscribe(OrderEventSubscriber::class); } } ?>

Смотрите также

  • метод dispatch,
    который используется для отправки события
  • метод listen,
    который регистрирует обработчик для события
  • класс Event,
    который предоставляет интерфейс для работы с событиями
  • функция event,
    которая является вспомогательной для отправки событий
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить