Я тестирую новую схему 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.
Заранее спасибо!!!
Не исправление, а обходной путь, пока они не догонят. Очень ковбойский метод.
php bin/console doctrine:generate:entities AppBundle
Извините, это далеко от идеала, но самый простой метод, который я нашел, вместо того, чтобы генерировать все методы получения / установки вручную.
Начиная с 4.x вся идея doctrine:generate:entities
был сброшен (В этом выпуске после долгого чтения вы заметите, что Doctrine полностью отбросила команды, отсюда и новый пакет Symfony maker).
Видимо, это считается плохой практикой. Вместо этого они выпустили новый пакет под названием производитель, который по сути создает класс сущностей для вас, но без методов получения / установки, и новая рекомендуемая практика заключается в том, чтобы полагаться на вашу среду IDE для автоматической генерации методов получения и установки для вас.
Это работает за исключением конструктора для ArrayCollections
за @OneToMany
, но это не займет много времени, чтобы добавить их вручную.
То, что я сказал выше, также отражено в Документация Symfony.
Генерация геттеров и сеттеров
Теперь Doctrine знает, как сохранить объект Product в базе данных.
Но сам класс пока не полезен. Все свойства
частный, так что нет возможности установить данные о них!По этой причине вы должны создавать публичные методы получения и установки для всех
поля, которые нужно изменить снаружи класса. Если вы используете
IDE, как PhpStorm, он может генерировать их для вас. В PhpStorm поставь
курсор в любом месте класса, затем перейдите к коду -> создать
и выберите «Getters and Setters»:
У меня такая же проблема. Здесь другое решение.
Временно измените Doctrine \ Bundle \ DoctrineBundle \ Mapping: getBasePathForClass
После
$namespace = str_replace('\\', '/', $namespace);
добавлять:
$namespace = str_replace('App/', '', $namespace);
Объекты будут созданы в src / App / Entity /. После копирования-вставки удалите src / App.