添加到购物车时Sylius错误

时间:2014-06-30 08:55:20

标签: php symfony shopping-cart cart sylius

我正在使用Sylius提供的一些捆绑建立商店。到目前为止,我已经安装了ResourceBundle,ProductBundle,OrderBundle和CartBundle。

我在拨打' sylius_cart_item_add'时遇到问题。产品页面上的路径:

  

ContextErrorException:Catchable Fatal Error:传递给Sylius \ Bundle \ CartBundle \ Event \ CartEvent :: __ construct()的参数1必须是Sylius \ Bundle \ CartBundle \ Model \ CartInterface的实例,XXXX \ OrderBundle \ Entity \的实例给出的订单,在第103行的/XXXX/XXXX/XXXX/XXXX/vendor/sylius/cart-bundle/Sylius/Bundle/CartBundle/Provider/CartProvider.php中调用,并在/ XXXX / XXXX / XXXX / XXXX / vendor /中定义sylius / cart-bundle / Sylius / Bundle / CartBundle / Event / CartEvent.php第42行

我已经在 the documentation 之后安装了CartBundle(我还没有创建一个CartItem实体,根据指南是可选的)。这是我的Sylius包的配置文件(XXXX代表我的公司名称):

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

我很乐意感谢任何帮助,提前谢谢。

编辑:看着Sylius'代码,问题似乎在CartBundle / Provider / CartProvider / getCart()函数中(第101行):

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

这会返回一个Order对象而不是CartInterface,似乎存储库配置不正确,有什么建议吗?

2 个答案:

答案 0 :(得分:0)

您似乎缺少use Sylius\Bundle\CartBundle\Model\CartInterface

答案 1 :(得分:0)

我可以通过使我的Order实体实现CartInterface来解决这个问题,我还修改了我的OrderItem实体来实现CartItemInterface。

最后,这是我的config.yml文件

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: ~

此外,这是我的路由条目,呼叫控制器:

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

我仍然想知道为什么ResourceBundle存储库不使用Cart而不是Order