Symfony Flex — Doctrine генерирует сущность и исключение среды выполнения сущностей

Я тестирую новую схему Symfony 4 с помощью Flex, и у меня большие проблемы при создании сущности Doctrine или сущностей сущностей.

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

php bin/console doctrine:generate:entities

а также

php bin/console doctrine:generate:entities App:MyBundle:MyEntity

В этой версии (Symfony 3.3-dev с новым скелетом Flex) новая структура папок «удаляет» старую структуру Bundle и при выполнении вышеуказанных команд для создания сущности в ./src/Entity это возвращает и ошибка как это:

[RuntimeException] Не удается найти базовый путь для «App \ Entity \ ExampleEntity» (путь: «/mnt/c/…/src/Entity», пункт назначения: «/mnt/c/…/src/Entity»).

Вопрос заключается в том, каким образом можно создать сущность или сущности сущности, ориентированные на путь, а не с помощью директивы автозагрузки PSR-4.

Заранее спасибо!!!

1

Решение

Не исправление, а обходной путь, пока они не догонят. Очень ковбойский метод.

  1. Настройте новый проект со стандартной файловой структурой Symfony.
  2. Скопируйте ваши основные объекты в папку объекта.
  3. Генерировать права там php bin/console doctrine:generate:entities AppBundle
  4. Скопируйте и вставьте их в новую папку сущностей проекта Symfony Flex.
  5. Используя IDE, найдите и замените в папке AppBundle с Приложение

Извините, это далеко от идеала, но самый простой метод, который я нашел, вместо того, чтобы генерировать все методы получения / установки вручную.


Начиная с 4.x вся идея doctrine:generate:entities был сброшен (В этом выпуске после долгого чтения вы заметите, что Doctrine полностью отбросила команды, отсюда и новый пакет Symfony maker).

Видимо, это считается плохой практикой. Вместо этого они выпустили новый пакет под названием производитель, который по сути создает класс сущностей для вас, но без методов получения / установки, и новая рекомендуемая практика заключается в том, чтобы полагаться на вашу среду IDE для автоматической генерации методов получения и установки для вас.

Это работает за исключением конструктора для ArrayCollections за @OneToMany, но это не займет много времени, чтобы добавить их вручную.

То, что я сказал выше, также отражено в Документация Symfony.

Генерация геттеров и сеттеров

Теперь Doctrine знает, как сохранить объект Product в базе данных.
Но сам класс пока не полезен. Все свойства
частный, так что нет возможности установить данные о них!

По этой причине вы должны создавать публичные методы получения и установки для всех
поля, которые нужно изменить снаружи класса. Если вы используете
IDE, как PhpStorm, он может генерировать их для вас. В PhpStorm поставь
курсор в любом месте класса, затем перейдите к коду -> создать
и выберите «Getters and Setters»:

3

Другие решения

У меня такая же проблема. Здесь другое решение.

Временно измените Doctrine \ Bundle \ DoctrineBundle \ Mapping: getBasePathForClass

После

$namespace = str_replace('\\', '/', $namespace);

добавлять:

$namespace = str_replace('App/', '', $namespace);

Объекты будут созданы в src / App / Entity /. После копирования-вставки удалите src / App.

1

По вопросам рекламы [email protected]