Рекомендуемый способ добавления нового объекта в базовый комплект sylius?

В настоящее время используется: базовая установка стандарта sylius для веб-сайта электронной коммерции.

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

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

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

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

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

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

Я читал переопределение моделей на странице > переопределение моделей Sylius. рассмотрели другой связанный вопрос о stackoverflow Как создать новую модель с Sylius через SyliusResourceBundle, но неясно, так как он использует SyliusResourceBundle, а я хочу расширить SyliusCoreBundle (не уверен, сможем ли мы расширить его в первую очередь или нет)

Как мне добиться этого в рамках sylius?


person Tragaknight    schedule 20.01.2015    source источник


Ответы (1)


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

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

Sylius\Component\Core\Model\User

А также

Acme\Bundle\Entity\UserData

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

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

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

Это устранило ошибку существования таблицы sylius_user.

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

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

Затем я закомментировал строку drive : doctrine/orm для соответствующей записи в

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 с моим новым классом User
  • Новый ресурс, который в основном представляет собой класс пользовательских данных.

Теперь о сопоставлении доктрины (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>

person Tragaknight    schedule 20.01.2015