📅  最后修改于: 2023-12-03 15:09:07.054000             🧑  作者: Mango
在 Laravel 中,监听器(Listener)是用于处理事件(Event)的类。它们接收事件并执行一些操作,通常用于处理日志记录、发送电子邮件、发送通知等操作。但是,当监听器文件变得很大并且包含许多事件处理器(Event Handlers)时,需要将它们分解为单独的文件以使代码更具可读性。在这种情况下,将事件处理器放在单独的文件中,然后将它们放入监听器文件可能会更好。在本文中,我们将介绍如何将外部文件放入 Laravel 监听器类。
首先,我们需要创建一个事件处理器类作为外部文件。请考虑以下示例。
namespace App\Listeners\Handlers;
use App\Events\OrderShipped;
class SendShipmentNotification
{
public function handle(OrderShipped $event)
{
// send shipment notification
}
}
在此示例中,我们创建了一个事件处理器类SendShipmentNotification
,并实现了handle方法用于处理OrderShipped
事件。
接下来,我们需要将事件处理器类导入监听器类中。在监听器类中,我们可以使用use
语句导入事件处理器类。请考虑以下示例。
namespace App\Listeners;
use App\Events\OrderShipped;
use App\Listeners\Handlers\SendShipmentNotification;
class OrderEventListener
{
public function handle(OrderShipped $event)
{
// handle shipped order
}
public function sendShipmentNotification(OrderShipped $event)
{
(new SendShipmentNotification())->handle($event);
}
}
在此示例中,我们创建了一个监听器类 OrderEventListener
,使用use
语句导入SendShipmentNotification
事件处理器类。在sendShipmentNotification
方法中,我们实例化了SendShipmentNotification
类并调用其handle
方法以处理事件。
最后,我们需要在 Laravel 中注册事件监听器。请考虑以下示例。
namespace App\Providers;
use App\Events\OrderShipped;
use App\Listeners\OrderEventListener;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
OrderShipped::class => [
OrderEventListener::class,
],
];
}
在此示例中,我们使用$listen
数组注册了Order事件
,并将其分配到OrderEventListener
监听器。
现在,我们已经将外部文件放入 Laravel 监听器类,使代码更具可读性和可维护性。