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

时间:2019-07-10 17:04:16

标签: sylius-resource

我是sylius工作的初学者,我想先对订单项进行调整,然后再将其保留在数据库中。因此,我根据文档https://docs.sylius.com/en/1.5/book/architecture/events.html

中所说的sylius.order_item.pre_create事件创建了一个侦听器。

所有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 个答案:

答案 0 :(得分:0)

我已经找到解决问题的方法。实际上,将产品添加到卡路线 sylius_shop_ajax_cart_add_item 时,是通过 post 方法调用的。进行 bin /控制台调试:路由器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 }

谢谢。