【问题标题】:Doctrine ODM bundle document mapping in XML formatXML 格式的 Doctrine ODM 捆绑文档映射
【发布时间】:2018-12-06 20:54:49
【问题描述】:

我在 Symfony 4 中使用 Doctrine ODM 捆绑包。 尝试对 Documents 使用 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>

Composer 配置(需要部分): "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.*" } 有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    将映射文件命名为Post.dcm.xml

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

    【讨论】:

    • 前缀应该是App\Document。将自动映射设置为 false。清除缓存。
    • 在所有描述的步骤之后,我得到了同样的错误 - No mapping file found named 'Post.mongodb.xml' for class 'App\Document\Post'. 也许,XML 映射文件必须有 Post.mongodb.xml 名称?
    • 也许,您的项目与 ODM 相关的依赖项是什么?
    • 在我的问题中添加了 composer.json 配置。
    【解决方案2】:

    除了prefix 值中的斜杠之外,我的配置中的所有内容都是正确的。

    根据documentation

    映射文档的名称必须由类的完全限定名称组成,其中命名空间分隔符由点 (.) 替换。

    如果您提供前缀,即文档的命名空间,您将获得像 Post.mongodb.xml 这样的映射文件名

    例子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-12-04
      • 2012-06-11
      • 1970-01-01
      相关资源
      最近更新 更多