Отображение документов пакета Doctrine ODM в формате XML - PullRequest
0 голосов
/ 06 декабря 2018

Я использую Doctrine ODM с Symfony 4. Пытаюсь использовать формат отображения XML для документов и получаю следующую ошибку:

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

My 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.*" } Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

В моих конфигах все было правильно из вопроса, кроме завершающей косой черты в prefix значении.

Согласно документации :

Имядокумент сопоставления должен состоять из полностью определенного имени класса, где разделители пространства имен заменяются точками (.).

Если вы предоставите префикс, который является пространством имен для ваших документов, вы получитеимя файла сопоставления, например Post.mongodb.xml

Пример:

  • Пространство имен Post документа App\Document
  • Ваш префикс сопоставления App\Document
  • Отображение имени файла Post.mongodb.xml соответственно.
0 голосов
/ 06 декабря 2018

Назовите файл сопоставления Post.dcm.xml.

Это соглашение design .Для App\Document\Namespace\Another документа это будет Namespace.Another.dcm.xml.

...