Sylius: Как создать базу слушателей на Entity реализуя SyliusResourceBundle - PullRequest
0 голосов
/ 10 июля 2019

Я новичок в работе над 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 Ответ

0 голосов
/ 11 июля 2019

Я нашел решение для моей проблемы. Фактически при добавлении товара в карточку маршрут 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 }

спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...