duandong1963 2014-06-30 08:55
浏览 80
已采纳

添加到购物车时Sylius错误

I'm building a shop using some bundles provided by Sylius. I have installed the ResourceBundle, ProductBundle, OrderBundle and CartBundle so far.

I am having trouble when calling the 'sylius_cart_item_add' path on the product page:

ContextErrorException: Catchable Fatal Error: Argument 1 passed to Sylius\Bundle\CartBundle\Event\CartEvent::__construct() must be an instance of Sylius\Bundle\CartBundle\Model\CartInterface, instance of XXXX\OrderBundle\Entity\Order given, called in /XXXX/XXXX/XXXX/XXXX/vendor/sylius/cart-bundle/Sylius/Bundle/CartBundle/Provider/CartProvider.php on line 103 and defined in /XXXX/XXXX/XXXX/XXXX/vendor/sylius/cart-bundle/Sylius/Bundle/CartBundle/Event/CartEvent.php line 42

I have installed CartBundle following the documentation (I haven't created a CartItem entity, as is optional according to the guide). This is my config file for Sylius bundles (XXXX stands for my company name):

sylius_resource:
    resources:
        dinamic.product:
            driver: doctrine/orm
            classes:
                model: XXXX\ProductBundle\Entity\Product
                interface: Sylius\Bundle\ProductBundle\Model\ProductInterface
                controller: Sylius\Bundle\ResourceBundle\Controller\ResourceController
                repository: Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository

sylius_product:
    driver: doctrine/orm
    classes:
        product:
            model: XXXX\ProductBundle\Entity\Product
            controller: Sylius\Bundle\ProductBundle\Controller\ProductController
            repository: XXXX\ProductBundle\Repository\ProductRepository
            form: Sylius\Bundle\ProductBundle\Form\Type\ProductType

sylius_order:
    driver: doctrine/orm
    classes:
        order:
            model: XXXX\OrderBundle\Entity\Order
        order_item:
            model: XXXX\OrderBundle\Entity\OrderItem

sylius_money:
    driver: doctrine/orm

sylius_cart:
    resolver: XXXX.cart_item_resolver
    classes: ~

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

I would gladly appreciate any help, thanks in advance.

EDIT: looking in Sylius' code, the problem seems to be in CartBundle/Provider/CartProvider/getCart() function (line 101):

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

This returns a Order object instead of a CartInterface one, seems that the repository is not configured correctly, any suggestions?

  • 写回答

2条回答 默认 最新

  • dsy19811981 2014-07-01 11:36
    关注

    I could work around the problem by making my Order entity implement CartInterface, I also modified my OrderItem entity to implement CartItemInterface.

    Finally, this is my config.yml file

    sylius_resource:
        resources:
            dinamic.product:
                driver: doctrine/orm
                classes:
                    model: XXXX\ProductBundle\Entity\Product
                    interface: Sylius\Bundle\ProductBundle\Model\ProductInterface
                    controller: Sylius\Bundle\ResourceBundle\Controller\ResourceController
                    repository: Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository
            dinamic.cart:
                driver: doctrine/orm
                classes:
                    model: XXXX\OrderBundle\Entity\Cart
                    interface: Sylius\Bundle\CartBundle\Model\CartInterface
                    controller: Sylius\Bundle\ResourceBundle\Controller\ResourceController
                    repository: Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository
    
    sylius_product:
        driver: doctrine/orm
        classes:
            product:
                model: XXXX\ProductBundle\Entity\Product
                controller: Sylius\Bundle\ProductBundle\Controller\ProductController
                repository: XXXX\ProductBundle\Repository\ProductRepository
                form: Sylius\Bundle\ProductBundle\Form\Type\ProductType
    
    sylius_order:
        driver: doctrine/orm
        classes:
            order:
                model: XXXX\OrderBundle\Entity\Order
            order_item:
                model: Dinamic\OrderBundle\Entity\OrderItem
    
    sylius_money:
        driver: doctrine/orm
    
    sylius_cart:
        resolver: dinamic.cart_item_resolver
        classes: ~
    

    Also, this is my route entry with the call to the controller:

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

    I still want to know why the ResourceBundle repository doesn't use Cart instead of Order

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度