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

Метод dispatch

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

Синтаксис

<?php use Illuminate\Support\Facades\Event; Event::dispatch($event); ?>

Пример

Давайте создадим событие 'UserRegistered' и отправим его с данными пользователя:

<?php namespace App\Events; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class UserRegistered { use Dispatchable, SerializesModels; public $user; public function __construct($user) { $this->user = $user; } } ?>
<?php namespace App\Http\Controllers; use App\Events\UserRegistered; use Illuminate\Support\Facades\Event; class UserController extends Controller { public function store() { $user = ['name' => 'John', 'email' => 'john@example.com']; Event::dispatch(new UserRegistered($user)); echo "Event dispatched successfully"; } } ?>

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

"Event dispatched successfully"

Пример

Давайте используем глобальную функцию event для диспетчеризации события:

<?php namespace App\Http\Controllers; use App\Events\OrderShipped; class OrderController extends Controller { public function ship($orderId) { $order = ['id' => $orderId, 'status' => 'shipped']; event(new OrderShipped($order)); echo "Order shipped event dispatched"; } } ?>

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

"Order shipped event dispatched"

Пример

Давайте диспетчеризируем событие с помощью трейта Dispatchable, который добавляет метод dispatch в класс события:

<?php namespace App\Events; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class OrderCreated { use Dispatchable, SerializesModels; public $orderData; public function __construct($orderData) { $this->orderData = $orderData; } } ?>
<?php namespace App\Http\Controllers; use App\Events\OrderCreated; class OrderController extends Controller { public function create() { $order = ['product' => 'Laptop', 'price' => 1000]; OrderCreated::dispatch($order); echo "Order created event dispatched"; } } ?>

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

"Order created event dispatched"

Пример

Давайте диспетчеризируем событие и получим результаты работы слушателей:

<?php namespace App\Events; use Illuminate\Foundation\Events\Dispatchable; class ProcessData { use Dispatchable; public $data; public function __construct($data) { $this->data = $data; } } ?>
<?php namespace App\Listeners; use App\Events\ProcessData; class ProcessDataListener { public function handle(ProcessData $event) { return strtoupper($event->data); } } ?>
<?php namespace App\Http\Controllers; use App\Events\ProcessData; use Illuminate\Support\Facades\Event; class DataController extends Controller { public function process() { $res = Event::dispatch(new ProcessData('hello world')); echo $res[0]; } } ?>

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

"HELLO WORLD"

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

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