使用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
由于
此致
克里斯
答案 0 :(得分:1)
教义orm和doctrine:generate:entities
存在类似的问题。 Doctrine团队不鼓励用户使用这些命令,因此不再需要维护它们。
我认为到目前为止我看到的最简单的解决方法是:
AppBundle
更改为App
。一些Symfony团队也开始在MakerBundle中提供类似的代码生成。据我所知,没有什么可以生成ODM风格的实体,但你可以自己打开一个问题或为此做出贡献。
答案 1 :(得分:0)
MongoDBBundle要求你有“Bundle”,但是使用Symfony flex你使用FrameworkBundle而不是“AppBundle”,除非你之前创建它,我认为你还没有创建它,所以它告诉你它不存在。
由于FrameworkBundle具有其他namspace和其他基本路径,因此无法使用“FrameworkBundle”,因此生成文档的命令不知道文件的位置。
经过大量时间弄清楚如何修复它:
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
"App\\": "App/"
rm -rf var/cache/* && composer install
强制清除缓存和引用。php bin/console doctrine:mongodb:generate:documents AppCoreBundle
重要! 此解决方案解决了MongoODMBundle与Symfony 4的兼容性问题,但这不是正确的方法。正确的修复涉及修改bundle或Symfony 4的行为。