阅读(2145) (7)

Laravel 8 分发事件

2021-07-01 17:46:46 更新

要分发事件,你可以将事件实例传递给 event 辅助函数。该辅助函数将会把事件分发到所有该事件已注册的监听器上。event 辅助函数可以全局使用,你可以在应用中的任何位置进行调用:

<?php

namespace App\Http\Controllers;

use App\Events\OrderShipped;
use App\Http\Controllers\Controller;
use App\Models\Order;

class OrderController extends Controller
{
    /**
     * 为给定的订单发货
     *
     * @param  int  $orderId
     * @return Response
     */
    public function ship($orderId)
    {
        $order = Order::findOrFail($orderId);

        // 订单发货逻辑 ...

        event(new OrderShipped($order));
    }
} 

另外,如果你的事件使用 Illuminate\Foundation\Events\Dispatchable trait, 则可以在事件上调用静态的 dispatch 方法。 传递给 dispatch 方法的所有参数都将传递给事件的构造函数:

OrderShipped::dispatch($order); 

技巧:在测试时,只需要断言特定事件被分发,而不需要真正地触发监听器。Laravel 的 内置测试辅助函数 可以轻松做到这一点。