Ошибка Sylius при добавлении в корзину

#php #symfony #shopping-cart #cart #sylius

#php #symfony #корзина покупок #Корзина #sylius

Вопрос:

Я создаю магазин, используя некоторые пакеты, предоставленные Sylius. Я уже установил ResourceBundle, ProductBundle, OrderBundle и CartBundle.

У меня возникли проблемы при вызове пути ‘sylius_cart_item_add’ на странице продукта:

Контекстное исключение: исправляемая неустранимая ошибка: аргумент 1, переданный SyliusBundleCartBundleEventCartEvent::__construct() должен быть экземпляром SyliusBundleCartBundleModelCartInterface, экземпляр XXXXOrderBundleEntityOrder, вызывается в /XXXX/XXXX/XXXX/XXXX/vendor/sylius/cart-bundle/Sylius/Bundle/CartBundle/Provider/CartProvider.php в строке 103 иопределено в /XXXX/XXXX/XXXX/XXXX/vendor/sylius/cart-bundle/Sylius/Bundle/CartBundle/Event/CartEvent.php строка 42

Я установил CartBundle в соответствии с документацией (я не создал объект CartItem, как это необязательно в соответствии с руководством). Это мой конфигурационный файл для пакетов Sylius (XXXX означает название моей компании):

 sylius_resource:
    resources:
        dinamic.product:
            driver: doctrine/orm
            classes:
                model: XXXXProductBundleEntityProduct
                interface: SyliusBundleProductBundleModelProductInterface
                controller: SyliusBundleResourceBundleControllerResourceController
                repository: SyliusBundleResourceBundleDoctrineORMEntityRepository

sylius_product:
    driver: doctrine/orm
    classes:
        product:
            model: XXXXProductBundleEntityProduct
            controller: SyliusBundleProductBundleControllerProductController
            repository: XXXXProductBundleRepositoryProductRepository
            form: SyliusBundleProductBundleFormTypeProductType

sylius_order:
    driver: doctrine/orm
    classes:
        order:
            model: XXXXOrderBundleEntityOrder
        order_item:
            model: XXXXOrderBundleEntityOrderItem

sylius_money:
    driver: doctrine/orm

sylius_cart:
    resolver: XXXX.cart_item_resolver
    classes: ~

stof_doctrine_extensions:
    orm:
        default:
            sluggable: true
            timestampable: true
  

Я был бы рад любой помощи, заранее спасибо.

РЕДАКТИРОВАТЬ: глядя в код Sylius, проблема, похоже, в функции CartBundle / Provider / CartProvider / getCart() (строка 101):

 $this->cart = $this->repository->createNew();
  

Это возвращает объект Order вместо объекта CartInterface, кажется, что репозиторий настроен неправильно, есть предложения?

Ответ №1:

Похоже, вы чего-то не хватает use SyliusBundleCartBundleModelCartInterface .

Комментарии:

1. Файл на месте, с CartItemInterface

2. @Joel Пожалуйста, укажите содержимое файла, в котором возникает ошибка.

3. @umpirsky Я не знаю, в каком файле содержится ошибка. Я думаю, что это происходит внутри SyliusCartBundle, но, к сожалению, я не могу точно определить ошибку.

4. @Joel О, похоже, это просто ваша XXXXOrderBundleEntityOrder обязательная реализация SyliusBundleCartBundleModelCartInterface . Итак, XXXXOrderBundleEntityOrder прошу вас.

5. Да, как я уже сказал в своем ответе, но я до сих пор не знаю, почему репозиторий ResourceBundle не использует корзину вместо заказа. Вот суть gist.github.com/anonymous/7ed2097810420a03fb62

Ответ №2:

Я мог бы обойти проблему, заставив мой объект Order реализовать CartInterface, я также изменил свой объект OrderItem для реализации CartItemInterface.

Наконец, это мой файл config.yml

 sylius_resource:
    resources:
        dinamic.product:
            driver: doctrine/orm
            classes:
                model: XXXXProductBundleEntityProduct
                interface: SyliusBundleProductBundleModelProductInterface
                controller: SyliusBundleResourceBundleControllerResourceController
                repository: SyliusBundleResourceBundleDoctrineORMEntityRepository
        dinamic.cart:
            driver: doctrine/orm
            classes:
                model: XXXXOrderBundleEntityCart
                interface: SyliusBundleCartBundleModelCartInterface
                controller: SyliusBundleResourceBundleControllerResourceController
                repository: SyliusBundleResourceBundleDoctrineORMEntityRepository

sylius_product:
    driver: doctrine/orm
    classes:
        product:
            model: XXXXProductBundleEntityProduct
            controller: SyliusBundleProductBundleControllerProductController
            repository: XXXXProductBundleRepositoryProductRepository
            form: SyliusBundleProductBundleFormTypeProductType

sylius_order:
    driver: doctrine/orm
    classes:
        order:
            model: XXXXOrderBundleEntityOrder
        order_item:
            model: DinamicOrderBundleEntityOrderItem

sylius_money:
    driver: doctrine/orm

sylius_cart:
    resolver: dinamic.cart_item_resolver
    classes: ~
  

Кроме того, это моя запись маршрута с вызовом контроллера:

 XXXX_cart_item_add:
    pattern: /agregar
    defaults: { _controller: sylius.controller.cart_item:addAction }
  

Я все еще хочу знать, почему репозиторий ResourceBundle не использует корзину вместо заказа