提问人:tee 提问时间:6/23/2023 最后编辑:tee 更新时间:10/27/2023 访问量:307
如何检测使用 Shopware 6.5(事件订阅者)下达的订单并获取其当前状态
how to detect an order placed with shopware 6.5 (event subscribers) and also get its present state
问:
您好,我正在尝试使用shopware 6.5检测新订单何时进入我的商店
这就是我正在做的:
OrderEvents::ORDER_WRITTEN_EVENT => 'OnOrderReceived',
public function OnOrderReceived(EntityWrittenEvent $event) { if ($event->getEntityName() === 'order') {
$writtenEntities = $event->getWriteResults();
foreach ($writtenEntities as $writeResult) {
// Get the entity data from the write result
$entityData = $writeResult->getPayload();
// Get the order ID from the entity data
$orderId = $entityData['id'];
$orderNumber = $entityData['orderNumber'];
// $this->logger->info('Orders is created, the order id is : ' . $orderId . ' and order number : ' . $orderNumber);
}
}
}`
有了这个,我能够获得订单 ID 和编号,但我似乎无法捕获订单的当前状态,例如“打开”。请问我该怎么做?
答:
0赞
j_elfering
6/23/2023
#1
这是一个非常低级的技术事件,因此很难获得您需要的信息。OrderEvents::ORDER_WRITTEN_EVENT
您应该更好地收听,因为该事件使您可以轻松访问所需的信息:\Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent
public static function getSubscribedEvents(): array
{
return [
CheckoutOrderPlacedEvent::class => 'onOrderPlaced',
];
}
public function onOrderPlaced(CheckoutOrderPlacedEvent $event): void
{
$orderId = $event->getOrderId();
$state = $event->getOrder()->getStateMachineState()->getName();
}
评论
0赞
tee
6/23/2023
只是有点困惑,这是 shopware 6.5 在调用我的方法之前,根据文档我需要返回 return [ ProductEvents::P RODUCT_SEARCH_RESULT_LOADED_EVENT => 'onProductSearched', OrderEvents::ORDER_WRITTEN_EVENT => 'OnOrderReceived', ];因此,在“CheckoutOrderPlacedEvent”的上下文中。我该指向什么?
0赞
j_elfering
6/23/2023
这与商店无关,这就是symfony活动订阅者的工作方式,所以我建议查看官方文档,真正了解那里发生了什么:symfony.com/doc/current/......我已经使用事件订阅者配置更新了答案。
0赞
tee
6/23/2023
非常感谢你,这让我有了更好的理解。有没有社区我可以跟进这样的symfony和shopware提示。谢谢
0赞
tee
6/23/2023
是的,它有效,我只是注入了状态机类,我得到了状态
0赞
j_elfering
6/23/2023
symfony文档是一个相当好的开始,因为我们(shopware)试图尽可能地遵循symfony的默认值。对于shopware,你可能想加入一个开放的社区松弛工作区: shopwarecommunity.slack.com 对于symfony来说,可能有类似的东西
评论