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 }
Благодарю.