0

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

我找不到在这种情况下使用命令教义:mongodb:generate:documents 的方法。

你能告诉我如何使用它吗?

示例:

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

谢谢

问候,

克里斯

4

2 回答 2

1

学说 orm 和doctrine:generate:entities. Doctrine 团队不鼓励用户使用这些命令,因此不想再维护它们。

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

  1. 使用 Symfony 安装程序创建一个 Symfony 3.3 风格的应用程序。
  2. 像以前一样在 AppBundle 中生成实体
  3. 将命名空间从 更改AppBundleApp
  4. 将文件移动到您的 Symfony 4 项目中。

一些 Symfony 团队还着手在MakerBundle中提供类似的代码生成。据我所知,没有什么可以生成 ODM 样式的实体,但您可以自己打开一个问题或为此贡献一些东西。

参考见:https ://github.com/doctrine/DoctrineBundle/issues/729

于 2018-02-17T19:06:03.193 回答
0

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

您也不能使用“FrameworkBundle”,因为 FrameworkBundle 有其他 namspace 和其他基本路径,因此生成文件的命令不知道文件在哪里。

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

  1. 在您的项目中创建自定义 Bundle(例如:AppCoreBundle)
  2. 在 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

  1. 将目录“src”更改为“App”以避免出现问题,然后更新 composer.json 中的 psr-4 namaspace:"App\\": "App/"
  2. 将所有文档移动到 Bundle Document 目录并更改包名称。
  3. 您还必须更改项目中对“src”目录的所有引用,例如在 services.yaml 中。
  4. 然后执行:rm -rf var/cache/* && composer install强制清除缓存和引用。
  5. 然后执行:php bin/console doctrine:mongodb:generate:documents AppCoreBundle

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

于 2018-02-18T13:45:01.740 回答