首页 文章

如何使用Symfony flex使用Symfony 3.4生成文档

提问于
浏览
0

使用Symfony flex,其中一个变化是使用symfony / skeleton时没有默认包 .

我没有找到使用命令doctrine的方法:mongodb:generate:在此上下文中的文档 .

你能告诉我怎么用吗?

例:

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 回答

  • 1

    与学说orm和 doctrine:generate:entities 有类似的问题 . Doctrine团队不鼓励用户使用这些命令,因此不再需要维护它们 .

    我认为到目前为止我看到的最简单的解决方法是:

    • 使用Symfony安装程序创建Symfony 3.3样式应用程序 .

    • 像以前一样在AppBundle中生成实体

    • 将命名空间从 AppBundle 更改为 App .

    • 将文件移动到Symfony 4项目中 .

    一些Symfony团队也开始在MakerBundle中提供类似的代码生成 . 据我所知,没有什么可以生成ODM风格的实体,但你可以自己打开一个问题或为此贡献一些东西 .

    供参考,请参阅:https://github.com/doctrine/DoctrineBundle/issues/729

  • 0

    MongoDBBundle要求你有“Bundle”,但是使用Symfony flex你使用FrameworkBundle而不是“AppBundle”,除非你之前创建它,我认为你还没有创建它,所以它告诉你它不存在 .

    由于FrameworkBundle具有其他namspace和其他基本路径,因此无法使用“FrameworkBundle”,因此生成文档的命令不知道文件的位置 .

    经过大量时间弄清楚如何修复它:

    • 在项目中创建自定义Bundle(EX:AppCoreBundle)

    • 在packages / 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

    • 将目录"src"更改为"App"以避免问题然后更新composer.json中的psr-4 namaspace: "App\\": "App/"

    • 将所有文档移动到Bundle Document目录并更改包名称 .

    • 您还必须在项目中更改对"src"目录的所有引用,例如在services.yaml中 .

    • 然后执行: rm -rf var/cache/* && composer install 强制清除缓存和引用 .

    • 然后执行: php bin/console doctrine:mongodb:generate:documents AppCoreBundle

    重要!此解决方案解决了MongoODMBundle与Symfony 4的兼容性问题,但这不是正确的方法 . 正确的修复涉及修改bundle或Symfony 4的行为 .

相关问题