gpt4 book ai didi

php - 命名 Laravel 事件、监听器和作业

转载 作者:可可西里 更新时间:2023-11-01 12:36:08 24 4
gpt4 key购买 nike

我有一个名为 UserWasRegistered 的事件,还有一个名为 UserWasRegistered 的监听器,我打算从那里开发作业命令:

EmailRegistrationConfirmation

NotifyAdminsNewRegistration

CreateNewBillingAccount

所有这些作业都将在 UserWasRegistered 事件监听器类中执行。

这是正确的方法还是我应该为 UserWasRegistered 设置多个监听器?我觉得使用工作方法使我能够在不同时间从应用程序的其他区域调用这些“工作”。例如如果用户更改了他们的详细信息,可能会调用 CreateNewBillingAccount...?

最佳答案

我建议更改更明确地说明正在发生的事情的监听器名称,这样我会避免直接将监听器与事件配对。

我们使用贫血事件/监听器方法,因此监听器将实际任务传递给“执行者”(工作、服务等)。

本例取自真实系统:

app/Providers/EventServiceProvider.php:

    OrderWasPaid::class    => [
ProvideAccessToProduct::class,
StartSubscription::class,
SendOrderPaidNotification::class,
ProcessPendingShipment::class,
LogOrderPayment::class
],

StartSubscription 监听器:

namespace App\Modules\Subscription\Listeners;


use App\Modules\Order\Contracts\OrderEventInterface;
use App\Modules\Subscription\Services\SubscriptionCreator;

class StartSubscription
{
/**
* @var SubscriptionCreator
*/
private $subscriptionCreator;

/**
* StartSubscription constructor.
*
* @param SubscriptionCreator $subscriptionCreator
*/
public function __construct(SubscriptionCreator $subscriptionCreator)
{
$this->subscriptionCreator = $subscriptionCreator;
}

/**
* Creates the subscription if the order is a subscription order.
*
* @param OrderEventInterface $event
*/
public function handle(OrderEventInterface $event)
{
$order = $event->getOrder();

if (!$order->isSubscription()) {
return;
}

$this->subscriptionCreator->createFromOrder($order);
}
}

通过这种方式,您可以在应用程序的其他区域调用作业/服务(在此示例中为 SubscriptionCreator)。

除了 OrderWasPaid 之外,还可以将监听器绑定(bind)到其他事件。

关于php - 命名 Laravel 事件、监听器和作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com