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

时间:2018-02-17 18:53:57

标签: symfony doctrine-odm symfony-flex

使用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 个答案:

答案 0 :(得分:1)

教义orm和doctrine:generate:entities存在类似的问题。 Doctrine团队不鼓励用户使用这些命令,因此不再需要维护它们。

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

  1. 使用Symfony安装程序创建Symfony 3.3样式应用程序。
  2. 像以前一样在AppBundle中生成实体
  3. 将名称空间从AppBundle更改为App
  4. 将文件移动到Symfony 4项目中。
  5. 一些Symfony团队也开始在MakerBundle中提供类似的代码生成。据我所知,没有什么可以生成ODM风格的实体,但你可以自己打开一个问题或为此做出贡献。

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

答案 1 :(得分:0)

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

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

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

  1. 在项目中创建自定义Bundle(EX:AppCoreBundle)
  2. 在packages / doctrine_mongodb.yaml中定义自定义映射(如果使用xml或yaml,则更改类型值)
  3. 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
    6. 重要! 此解决方案解决了MongoODMBundle与Symfony 4的兼容性问题,但这不是正确的方法。正确的修复涉及修改bundle或Symfony 4的行为。