如何检测使用 Shopware 6.5(事件订阅者)下达的订单并获取其当前状态

how to detect an order placed with shopware 6.5 (event subscribers) and also get its present state

提问人:tee 提问时间:6/23/2023 最后编辑:tee 更新时间:10/27/2023 访问量:307

问:

您好,我正在尝试使用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 和编号,但我似乎无法捕获订单的当前状态,例如“打开”。请问我该怎么做?

PHP Symfony Events Shopware6 订阅者

评论


答:

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来说,可能有类似的东西