我有一个名为UserWasRegistered
的事件我也有一个名为UserWasRegistered
的监听器,我在那里开发了一个叫做的命令:
EmailRegistrationConfirmation
NotifyAdminsNewRegistration
CreateNewBillingAccount
所有这些作业都将在UserWasRegistered
事件监听器类中执行。
这是正确的方法还是应该为UserWasRegistered
设置多个听众?我觉得使用工作方法使我能够在不同的时间从我的应用程序中的其他区域调用那些“工作”。例如如果用户更改了他们的详细信息,则可能会调用CreateNewBillingAccount
来调用...
答案 0 :(得分:5)
我建议更改听众名称,以便更清楚地了解发生的事情,因此我避免直接将听众与事件配对。
我们正在使用贫血的事件/听众方法,因此听众将实际任务传递给" doers" (工作,服务,您将其命名)。
此示例取自实际系统:
应用/提供者/ 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
之外,还可以将侦听器绑定到其他事件。