2015-01-20 1 views
2

В настоящее время используется: базовая установка sylius-standard, для сайта электронной коммерции.Рекомендуемый способ добавления нового объекта в пакет sylius core?

Вот что я хотел бы выполнить: В основном мы знаем, что есть объект пользователя, который находится в

vendor/sylius/sylius/src/Sylius/Component/Core/Model/User.php 

Это Entity фактически продлевая FOS \ UserBundle \ Model \ User и он также имеет связанный UserInterface, который реализует FOS \ UserBundle \ Model \ UserInterface.

Моя цель - создать еще одну сущность UserData, которая может быть связана с отношением поля Doctrine OneToMany к вышеупомянутому пользовательскому объекту sylius, который является в основном таблицей sylius_user.

Так эффективно Entity Пользователь связан с UserData Сущности через oneToMany (для каждого пользователя может быть несколько экземпляров UserData сущностей.)

Sylius документация (http://sylius.readthedocs.org) не имеет, что связано с добавлением сущности - Если я ошибаюсь , пожалуйста, направляйте меня к правильным ссылкам.

Я прочитал верховные модели на ->sylius models override также прошли через другого рода родственного вопроса на StackOverflow How to create a new model with Sylius via SyliusResourceBundle, но не ясно, как он использует SyliusResourceBundle в то время как я хочу продлить SyliusCoreBundle (не уверен, что если мы можем продлить это в первую очередь или нет)

Как достичь этого в рамках sylius?

ответ

2

я решил проблемы, читая сегрегированных сообщения, так что положить здесь решение для сообщества (пожалуйста, дайте мне знать, если это не рекомендуемый путь и правильный путь, если нет):

Моя цель состояла в том, чтобы создать oneToMany доктрину отношения между

Sylius\Component\Core\Model\User 

И

Acme\Bundle\Entity\UserData 

, которую я создал. В основном для каждого пользователя может быть несколько экземпляров пользовательских данных, указывающих обратно на этого пользователя. Для этого сначала я следил за документами в sylius documentation , чтобы переопределить класс пользователя sylius, который представляет собой расширенный класс fosuserbundle.

На каком-то этапе я постоянно получаю ошибку [Doctrine\DBAL\Schema\SchemaException]
The table with name 'astrohealing_dev.sylius_user' already exists.

на основе предложений Winzou в: Для того, чтобы исправить эту ошибку, я изменил местоположение класса пользователя в sylius.yml (Sylius/Bundle/CoreBundle/Ресурсы/конфигурация/приложение/sylius .yml), которая является частью основного пучка и объявил свой собственный класс в качестве пользовательской модели, как это: sylius.yml

Это разрешило таблицу sylius_user существует ошибка

Но потом я получил другую ошибку:

[Symfony \ Component \ Config \ Definition \ Exception \ ForbiddenOverwriteException]
Путь конфигурации "sylius_core.driver" не может быть перезаписан.Вы должны определить все параметры для этого пути, и любой из его подкатегорий
-paths в одном разделе конфигурации.

Далее я закомментирована диск: доктрина/ОРМ линия для соответствующей записи в

app/config/config.yml 
 

 
    sylius_core: 
 
# driver: doctrine/orm 
 
    classes: 
 
     user: 
 
      model: Acme\Bundle\Entity\User 
 
      
 
sylius_resource: 
 
    resources: 
 
     sylius.userdata: 
 
      driver: doctrine/orm 
 
      classes: 
 
       model: Acme\Bundle\Entity\UserData

Вышеприведенные несколько строк также показывают:

  • Процентовка для sylius_core с мой новый класс пользователя
  • Новый ресурс, который является базовым только для нас erdata класс

Теперь для Doctrine Mapping (User.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"> 
 

 
    <entity name="Acme\Bundle\Entity\User" table="sylius_user"> 
 
     <one-to-many 
 
      field="userdata" 
 
      target-entity="Acme\Bundle\Entity\UserData" 
 
      mapped-by="userid" /> 
 
    </entity> 
 
</doctrine-mapping>

И отображение для UserData (UserData.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"> 
 

 
    <entity name="Acme\Bundle\Entity\UserData" table="sylius_userdata"> 
 
     <id name="id" type="integer"> 
 
      <generator strategy="AUTO" /> 
 
     </id> 
 
     <many-to-one 
 
      field="userid" 
 
      target-entity="Acme\Bundle\Entity\User" 
 
      inversed-by="userdata" 
 
      join-column="userid"> 
 
      <join-column name="user_id" referenced-column-name="id" nullable="false" /> 
 
     </many-to-one> 
 

 
     <field name="name" type="string" length="150" /> 
 
     <field name="datetime" type="datetime" /> 
 
    </entity> 
 
</doctrine-mapping>