How to listen to an order in shopware 6.5 and get all values?

95 Views Asked by At

I have created an EventSubscriber for getting an order when the "order" button is clicked.

#src/EventSubscriber/OrderSubmittedSubscriber.php
class OrderSubmittedSubscriber implements EventSubscriberInterface
{
    private LoggerInterface $logger;

    public static function getSubscribedEvents(): array
    {
        return [
//            CheckoutOrderPlacedEvent::class => 'onOrderPlaced',
            'checkout.order.placed'  => 'onOrderPlaced',
        ];
    }

    public function onOrderPlaced(CheckoutOrderPlacedEvent $event): void
    {
        $orderId = $event->getOrderId();
        $state = $event->getOrder()->getStateMachineState()->getName();

        $this->logger->notice('onOrderPlaced orderId: '.var_export($orderId, true));
        $this->logger->notice('onOrderPlaced state: '.var_export($state, true));
    }
#src/Resources/config/services.xml
plugins/MyOrderListener/src/Resources/config/services.xml
<services>
    <service id="ClpOrderListener\Listener\OrderSubmittedListener">
            <argument type="service" id="logger"/>
            <tag name="kernel.event_listener" event="order.written"/>
        </service>
</services>

But when I click the "order" button nothing get logged. What is missing? Is it the wrong event?

I followed this example: how to detect an order placed with shopware 6.5 (event subscribers) and also get its present state

1

There are 1 best solutions below

3
On

You have some minor issues in your subscriber and in the XML definition. For me, it works like this:

<?php declare(strict_types=1);

namespace Swag\Subscriber;

use Psr\Log\LoggerInterface;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class OrderPlacedSubscriber implements EventSubscriberInterface
{
    public function __construct(private LoggerInterface $logger)
    {
    }

    public static function getSubscribedEvents(): array
    {
        return [
            CheckoutOrderPlacedEvent::class => 'onOrderPlaced'
        ];
    }

    public function onOrderPlaced(CheckoutOrderPlacedEvent $event): void
    {
        $orderId = $event->getOrderId();
        $state = $event->getOrder()->getStateMachineState()->getName();

        $this->logger->notice('onOrderPlaced orderId: '.var_export($orderId, true));
        $this->logger->notice('onOrderPlaced state: '.var_export($state, true));
    }
}
<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="https://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="Swag\Subscriber\OrderPlacedSubscriber">
            <argument type="service" id="logger"/>
            <tag name="kernel.event_subscriber"/>
        </service>
    </services>
</container>