Sylius: Как создать базу слушателей на Entity реализуя SyliusResourceBundle

Я новичок в работе над sylius, и я хотел бы внести коррективы в позицию заказа, прежде чем она будет сохранена в базе данных. Поэтому я создаю базу слушателей для события sylius.order_item.pre_create, как сказано в документации https://docs.sylius.com/en/1.5/book/architecture/events.html

Все пакеты Sylius используют SyliusResourceBundle, который имеет некоторые встроенные события в этом формате, например

sylius.resource.pre_create

Ее мой слушатель конфиг

services:
    app.listener.order_item:
        class: App\EventListener\OrderItemListener
        tags:
            - { name: kernel.event_listener, event: sylius.order_item.pre_create, method: onSyliusOrderItemPreCreate }

Она мой класс слушателя

<?php

namespace App\EventListener;


use Symfony\Component\EventDispatcher\GenericEvent;
use Sylius\Component\Core\Model\ShopUserInterface;
use App\Entity\Order\OrderItem;
use App\Entity\Order\Order;
use App\Entity\Order\Adjustement;
use App\Repository\Channel\ChannelPricingRepository;
use Sylius\Component\Channel\Context\ChannelContextInterface;
use Sylius\Component\Order\Factory\AdjustmentFactoryInterface;

class OrderItemListener
{

    public function onSyliusOrderItemPreCreate(GenericEvent $event)
    {
       var_dump(''); die;

        $orderItem = $event->getSubject();
        Assert::isInstanceOf($orderItem, OrderItem::class);     
    }
}

Но ничего не происходит, когда я добавляю новый продукт на карту. Что я скучаю? Может быть, я не очень хорошо понимаю концепцию, или я делаю вещи неправильно. Пожалуйста, помогите мне.

1 ответ

Решение

Я нашел решение для моей проблемы. Фактически при добавлении товара в маршрут карты sylius_shop_ajax_cart_add_item вызывается методом post. Выполнение отладки bin/console: маршрутизатор sylius_shop_ajax_cart_add_item показывает, что метод Sylius\Bundle\OrderBundle\Controller\OrderItemController::addAction исключен. В этом один $this->eventDispatcher->dispatchPreEvent(CartActions::ADD, $configuration, $orderItem); вызывается и CartActions::ADD = 'add'. Таким образом, ее событие - sylius.order_item.pre_add, а не sylius.order_item.pre_create, как я это сделал.

services:
    app.listener.order_item:
        class: App\EventListener\OrderItemListener
        tags:
            - { name: kernel.event_listener, event: sylius.order_item.pre_add, method: onSyliusOrderItemPreAdd }

Благодарю.

Другие вопросы по тегам