Sylius:如何基于实体实现 SyliusResourceBundle 创建侦听器



我是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 }

谢谢。

相关内容

  • 没有找到相关文章

最新更新