首页 文章

重写自定义Sylius包中的Variant类时出错

提问于
浏览
1

我一直试图在指南here之后派生出一个子类Sylius:VariableProductBundle:Variant在我自己的包中 .

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

按照Sylius文档中列出的覆盖模型的步骤后,我有以下错误:

Twig_Error_Runtime:在渲染模板期间抛出异常(“在链配置的命名空间中找不到类'Acme \ Bundle \ VariableProductBundle \ Model \ Variant'Sylius \ Bundle \ CartBundle \ Entity,FOS \ UserBundle \ 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文件中变量产品的条目是这样的:

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

谁能告诉我我失踪了什么?

2 回答

  • 1

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

    在MyBundle.php文件中(在bundle的根目录下),您可以覆盖构建函数,如下所示:

    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不会在“Model”目录中查找实体 . 您应该将Variant模型移动到“Entity”命名空间 . Sylius使用自定义编译器传递来实现此行为,但对于您的应用程序,它根本不需要 .

相关问题