Сопоставление документов пакета Doctrine ODM в формате XML

Я использую пакет Doctrine ODM с Symfony 4. Попытка использовать формат сопоставления 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 / Документ / Post.php файл:

namespace App\Document;

class Post
{
    protected $id;

    protected $title;

    protected $text;

//Getters and setters
}

Файл сопоставления XML SRC / ресурсы / конфигурация / доктрина / 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.*" } Любые идеи?

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
0
624
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Префикс должен быть App\Document. Установите для автоматического сопоставления значение false. Очистить кеш.

emix 06.12.2018 12:18

После всех описанных шагов я получаю ту же ошибку - No mapping file found named 'Post.mongodb.xml' for class 'App\Document\Post'. Может быть, у XML-файла сопоставления должно быть имя Post.mongodb.xml?

Viktor 06.12.2018 12:22

Может быть, какие у вашего проекта зависимости связаны с ODM?

emix 06.12.2018 12:31

К моему вопросу добавлена ​​конфигурация composer.json.

Viktor 06.12.2018 12:43
Ответ принят как подходящий

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

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

The name of the mapping document must consist of the fully qualified name of the class, where namespace separators are replaced by dots (.).

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

Пример:

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

Другие вопросы по теме