#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 не использует корзину вместо заказа