XML格式的Doctrine ODM捆绑文档映射

时间:2018-12-06 11:11:51

标签: mongodb symfony doctrine-orm doctrine-odm odm

我将Symctony 4与Doctrine ODM捆绑在一起使用。 尝试对文档使用XML映射格式并得到以下错误:

No mapping file found named 'Post.mongodb.xml' for class 'App\Document\Post'.

我的 doctrine_mongodb.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:
                App:
                    is_bundle: false
                    type: xml
                    dir: '%kernel.project_dir%/src/Resources/config/doctrine'
                    prefix: App\Document\
                    alias: App

文档 src / Document / Post.php 文件:

namespace App\Document;

class Post
{
    protected $id;

    protected $title;

    protected $text;

//Getters and setters
}

XML映射文件 src / Resources / config / doctrine / Post.mongodb.xml

<doctrine-mongo-mapping xmlns="http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping"
                        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:schemaLocation="http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping
                    http://doctrine-project.org/schemas/odm/doctrine-mongo-mapping.xsd">

    <document name="App\Document\Post">
        <field fieldName="id" id="true" />
        <field fieldName="title" type="string" />
        <field fieldName="text" type="string" />
    </document>
</doctrine-mongo-mapping>

作曲家配置(要求部分): "require": { "php": "^7.1.3", "ext-ctype": "*", "ext-iconv": "*", "alcaeus/mongo-php-adapter": "^1.1", "doctrine/mongodb-odm-bundle": "^3.5", "symfony/console": "4.2.*", "symfony/dotenv": "4.2.*", "symfony/flex": "^1.1", "symfony/framework-bundle": "4.2.*", "symfony/yaml": "4.2.*" } 有什么想法吗?

2 个答案:

答案 0 :(得分:0)

命名映射文件Post.dcm.xml

此约定由design使用。对于App\Document\Namespace\Another文档,它将为Namespace.Another.dcm.xml

答案 1 :(得分:0)

在我的配置中,从prefix值的问题execpt尾部斜杠开始,一切都正确。

根据documentation

  

映射文档的名称必须包含该类的完全限定名称,其中名称空间分隔符由点(。)代替。

如果提供前缀(即文档的命名空间),则将获得映射文件名,例如Post.mongodb.xml

示例:

  • Post文档App\Document的命名空间
  • 您的映射前缀App\Document
  • 分别映射文件名Post.mongodb.xml