2013-09-17 2 views
1

Я пытаюсь получить дочерний класс Sylius: VariableProductBundle: вариант в моем собственном пакете, следуя руководству here.Ошибка при переопределении Вариант класса в пользовательском пакете Sylius

Я создал новый пакет AcmeVariableProductBundle, который я получил из пакета SyliusVariableProduct через метод, описанный here.

После выполнения действия, описанные в документации Sylius для подмены модели, у меня есть следующее сообщение об ошибке:

Twig_Error_Runtime: An exception has been thrown during the rendering of a template ("The class 'Acme\Bundle\VariableProductBundle\Model\Variant' was not found in the chain configured namespaces 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") 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> 

Записи для переменного продукта в приложении/конфигурационный файл/sylius.yml это:

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

Может кто-нибудь сказать мне, что мне не хватает?

ответ

1

Symfony по умолчанию не ищет сущности в каталоге «Модель». Вы должны переместить модель Variant в пространство имен Entity. Sylius использует пользовательские пропуски компилятора для достижения такого поведения, но для вашего приложения это вовсе не требуется.

2

Возможно, слишком поздно, но для других: это сработало для меня.

В файле 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')); 
} 
Смежные вопросы