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 のインスタンス、 /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: 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();

これは、CartInterface オブジェクトではなく Order オブジェクトを返します。リポジトリが正しく構成されていないようですが、何か提案はありますか?

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 リポジトリが Order の代わりに Cart を使用しない理由を知りたい

于 2014-07-01T11:36:17.320 に答える
0

行方不明のようですuse Sylius\Bundle\CartBundle\Model\CartInterface

于 2014-06-30T09:50:24.933 に答える