使用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 回答
与学说orm和
doctrine:generate:entities
有类似的问题 . Doctrine团队不鼓励用户使用这些命令,因此不再需要维护它们 .我认为到目前为止我看到的最简单的解决方法是:
使用Symfony安装程序创建Symfony 3.3样式应用程序 .
像以前一样在AppBundle中生成实体
将命名空间从
AppBundle
更改为App
.将文件移动到Symfony 4项目中 .
一些Symfony团队也开始在MakerBundle中提供类似的代码生成 . 据我所知,没有什么可以生成ODM风格的实体,但你可以自己打开一个问题或为此贡献一些东西 .
供参考,请参阅:https://github.com/doctrine/DoctrineBundle/issues/729
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的行为 .