Метод 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"