1

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

在产品页面上调用“sylius_cart_item_add”路径时遇到问题:

ContextErrorException:可捕获的致命错误:传递给 Sylius\Bundle\CartBundle\Event\CartEvent::__construct() 的参数 1 必须是 Sylius\Bundle\CartBundle\Model\CartInterface 的实例,给定 XXXX\OrderBundle\Entity\Order 的实例,在第 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 行

我已经按照文档安装了 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 对象,似乎存储库配置不正确,有什么建议吗?

4

2 回答 2

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

于 2014-07-01T11:36:17.320 回答
0

看起来你失踪了use Sylius\Bundle\CartBundle\Model\CartInterface

于 2014-06-30T09:50:24.933 回答