我是sylius工作的初学者,我想在订单项目持久化之前对其进行调整。因此,我基于 sylius.order_item.pre_create 事件创建了一个侦听器,如文档中所述 https://docs.sylius.com/en/1.5/book/architecture/events.html
所有 Sylius bundle 都使用 SyliusResourceBundle,其中有一些这种格式的内置事件作为示例
sylius.resource.pre_create
她是我的侦听器配置
services:
app.listener.order_item:
class: AppEventListenerOrderItemListener
tags:
- { name: kernel.event_listener, event: sylius.order_item.pre_create, method: onSyliusOrderItemPreCreate }
她是我的听众班
<?php
namespace AppEventListener;
use SymfonyComponentEventDispatcherGenericEvent;
use SyliusComponentCoreModelShopUserInterface;
use AppEntityOrderOrderItem;
use AppEntityOrderOrder;
use AppEntityOrderAdjustement;
use AppRepositoryChannelChannelPricingRepository;
use SyliusComponentChannelContextChannelContextInterface;
use SyliusComponentOrderFactoryAdjustmentFactoryInterface;
class OrderItemListener
{
public function onSyliusOrderItemPreCreate(GenericEvent $event)
{
var_dump(''); die;
$orderItem = $event->getSubject();
Assert::isInstanceOf($orderItem, OrderItem::class);
}
}
但是当我向卡添加新产品时,没有任何反应。我想念什么?可能是我不太了解概念,或者我以错误的方式做事。请帮助我。
我已经找到了我的问题的解决方案。实际上,当将产品添加到卡路由时,sylius_shop_ajax_cart_add_item是使用post方法调用的。执行 bin/console debug:router 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: AppEventListenerOrderItemListener
tags:
- { name: kernel.event_listener, event: sylius.order_item.pre_add, method: onSyliusOrderItemPreAdd }
谢谢。