【问题标题】:Error when overriding Variant class in custom Sylius bundle在自定义 Sylius 包中覆盖 Variant 类时出错
【发布时间】:2013-09-21 09:22:54
【问题描述】:

我一直在尝试按照指南here 在我自己的包中派生 Sylius:VariableProductBundle:Variant 的子类。

我创建了一个新的包,AcmeVariableProductBundle,它是通过here 概述的方法从 SyliusVariableProduct 包派生的。

按照 Sylius 文档中概述的用于覆盖模型的步骤后,出现以下错误:

Twig_Error_Runtime:在渲染模板期间抛出异常(“在链配置的命名空间 Sylius\Bundle\CartBundle\Entity、FOS\UserBundle 中找不到类 'Acme\Bundle\VariableProductBundle\Model\Variant' \Entity, Acme\Bundle\CatalogueBundle\Entity, Sylius\Bundle\SalesBundle\Model, Sylius\Bundle\MoneyBundle\Model, Sylius\Bundle\SettingsBundle\Model, Sylius\Bundle\CartBundle\Model, Sylius\Bundle\ProductBundle\Model , Sylius\Bundle\VariableProductBundle\Model, Sylius\Bundle\TaxationBundle\Model, Sylius\Bundle\ShippingBundle\Model, Sylius\Bundle\PaymentsBundle\Model, Sylius\Bundle\PromotionsBundle\Model, Sylius\Bundle\AddressingBundle\Model, Sylius \Bundle\InventoryBundle\Model, Sylius\Bundle\TaxonomiesBundle\Model, Sylius\Bundle\CoreBundle\Model, FOS\UserBundle\Model") 在 SyliusWebBundle:Frontend/Homepage:main.html.twig 在第 2 行。

我的类定义如下:

namespace Acme\Bundle\VariableProductBundle\Model;

use Doctrine\Common\Collections\ArrayCollection;
use Sylius\Bundle\VariableProductBundle\Model\Variant as BaseVariant;

class Variant extends BaseVariant
{
    ...
}

我在以下位置创建了一个 xml 文件:Acme/Bundle/VariableProductBundle/Resources/config/doctrine/Variant.orm.xml 它看起来像这样:

<?xml version="1.0" encoding="UTF-8" ?>

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                                  http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">

    <mapped-superclass name="Acme\Bundle\VariableProductBundle\Model\Variant" table="sylius_variant">
        <field name="sku" column="sku" type="string" nullable="true" />
        <field name="price" column="price" type="integer" />
        <field name="onHand" column="on_hand" type="integer" />
        <field name="availableOnDemand" column="available_on_demand" type="boolean"/>

        <one-to-many field="images" target-entity="Sylius\Bundle\CoreBundle\Model\VariantImage" mapped-by="variant">
            <cascade>
                <cascade-all />
            </cascade>`
        </one-to-many>
    </mapped-superclass>

</doctrine-mapping>

app/config/sylius.yml 文件中变量 product 的入口是这样的:

sylius_variable_product:
    classes:
        variant:
            model: Acme\Bundle\VariableProductBundle\Model\Variant
            form: Sylius\Bundle\CoreBundle\Form\Type\VariantType

谁能告诉我我错过了什么?

【问题讨论】:

    标签: php symfony sylius


    【解决方案1】:

    可能为时已晚,但对其他人来说:这对我有用。

    在你的 MyBundle.php 文件中(在你的包的根目录),你可以像这样覆盖构建函数:

        public function build(ContainerBuilder $container)
        {
            $mappings = array(
                realpath(__DIR__ . '/Resources/config/doctrine/model') => 'Namespace\MyBundle\Model',
            );
            $container->addCompilerPass(DoctrineOrmMappingsPass::createXmlMappingDriver($mappings, array('doctrine.orm.entity_manager'), 'sylius_core.driver.doctrine/orm'));
        }
    

    【讨论】:

      【解决方案2】:

      Symfony 默认不在“模型”目录中寻找实体。您应该将 Variant 模型移动到“实体”命名空间。 Sylius 使用自定义编译器传递来实现此行为,但对于您的应用程序,它根本不是必需的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 2017-07-20
        • 2021-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多