Как сгенерировать документ с помощью Symfony 3.4, используя Symfony flex

В Symfony flex одно из изменений заключается в том, что при использовании symfony/skeleton отсутствует пакет по умолчанию.

Я не нахожу способ использовать команду doctrine:mongodb:generate:documents в этом контексте.

Не могли бы вы сказать мне, как его использовать?

Exemple:

php bin\console doctrine:mongodb:generate:documents App

2018-02-17T18:35:22+00:00 [error] Error thrown while running command "doctrine:mongodb:generate:documents AppBundle --document Test". Message: "No bundle AppBundle was found."

In DoctrineODMCommand.php line 87:

  No bundle AppBundle was found.

doctrine:mongodb:generate:documents [--document [DOCUMENT]] [--no-backup] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV] [--no-debug] [--] <command> <bundle>

Вот как я настраиваю свой проект

composer create-project symfony/skeleton:3.4 test

composer config "platform.ext-mongo" "1.6.16" && composer require "alcaeus/mongo-php-adapter"

composer require doctrine/mongodb-odm-bundle

Спасибо

С Уважением,

Крис

2 ответа

Существует аналогичная проблема с доктриной и doctrine:generate:entities, Команда Doctrine не рекомендует пользователям использовать эти команды и поэтому больше не хочет их обслуживать.

Я думаю, что самый простой обходной путь, который я видел до сих пор:

  1. Создайте приложение в стиле Symfony 3.3 с помощью установщика Symfony.
  2. Генерация сущностей в AppBundle, как вы делали раньше
  3. Изменить пространство имен с AppBundle в App,
  4. Переместите файлы в свой проект Symfony 4.

Некоторые из команды Symfony также намеревались обеспечить похожую генерацию кода в MakerBundle. Насколько я могу судить, генерировать сущности в стиле ODM нечего, но вы можете открыть вопрос или внести что-то для этого самостоятельно.

Для справки: https://github.com/doctrine/DoctrineBundle/issues/729

MongoDBBundle требует, чтобы у вас был "Bundle", но с Symfony flex вы используете FrameworkBundle, а не "AppBundle", если вы не создали его раньше, я думаю, что вы его не создали, поэтому он говорит вам, что он не существует.

Вы не можете использовать "FrameworkBundle", потому что у FrameworkBundle есть другое пространство имен и другой базовый путь, поэтому команда для создания документов не знает, где находятся файлы.

После большого количества времени выяснения, как грязно-исправить это:

  1. Создайте собственный Bundle внутри вашего проекта (например, AppCoreBundle)
  2. Определите пользовательское сопоставление внутри пакетов /doctrine_mongodb.yaml (измените значение типа, если вы используете xml или yaml)

doctrine_mongodb: auto_generate_proxy_classes: '%kernel.debug%' auto_generate_hydrator_classes: '%kernel.debug%' connections: default: server: '%env(MONGODB_URL)%' options: {} default_database: '%env(MONGODB_DB)%' document_managers: default: auto_mapping: true mappings: AppCoreBundle: is_bundle: true type: annotation dir: '/Document' prefix: App\CoreBundle\Document alias: AppCoreBundle

  1. Измените каталог "src" на "App", чтобы избежать проблем, затем обновите pmas-4 namaspace внутри composer.json: "App\\": "App/"
  2. Переместите все документы в каталог документов пакета и измените имена пакетов.
  3. Вам также придется изменить ВСЕ ссылки на каталог "src" в вашем проекте, например, в services.yaml.
  4. Затем выполните: rm -rf var/cache/* && composer install заставить очистить кеш и ссылки.
  5. Затем выполните: php bin/console doctrine:mongodb:generate:documents AppCoreBundle

Важный! Это решение решает проблемы совместимости с MongoODMBundle с Symfony 4, но это не правильный путь. Правильное исправление включает в себя изменение поведения пакета или Symfony 4.

Другие вопросы по тегам