重写自定义 Sylius 捆绑包中的变体类时出错


Error when overriding Variant class in custom Sylius bundle

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

我创建了一个新的捆绑包,AcmeVariableProductBundle,我通过这里概述的方法从SyliusVariableProduct bundle派生。

按照 Sylius 文档中概述的覆盖模型的步骤操作后,我遇到了以下错误:

Twig_Error_Runtime:在呈现模板期间抛出异常("在链配置的命名空间 Sylius''Bundle''CartBundle''Entity、FOS''UserBundle''Entity、Acme''Bundle''CatalogBundle''Entity、Sylius''Bundle''SalesBundle''Model、Sylius''Bundle''MoneyBundle''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") in SyliusWebBundle:Frontend/Homepage:main.html.twig at line 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 文件中变量产品的条目是这样的:

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

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

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

在 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'));
    }
默认情况下,

Symfony不会在"Model"目录中查找实体。应将变量模型移动到"实体"命名空间。Sylius 使用自定义编译器传递来实现此行为,但对于你的应用,它根本不是必需的。