Конфигурация JMSSerializerBundle Yaml для пользовательского класса сущностей

В моем проекте symfony2 есть пользовательский объект вне пакетов и фреймворка.

Мне нужно установить данные json в этот объект, но я не могу применить правильную конфигурацию к пользовательскому файлу yaml.

приложение/config/config.yml

jms_serializer:
    metadata:
        auto_detection: true
        directories:
            CORE:
                namespace_prefix: "Core\Domain\Model"
                path: "%kernel.root_dir%/Resources/serializer/CORE"

приложение/Ресурсы/сериализатор/CORE/Model.Product.yml

Core\Domain\Model\Product\Product:
    properties:
        id:
            type: integer
        objectId:
            type: string
        name:
            type: string ...

Возможно, этот пакет не работает с сущностями вне пакетов?

Всегда я вижу сообщение об ошибке: Вы должны определить тип для Core\Domain\Model\Product\Product::$id.

Я думаю, что JMSSerializerBundle не читает файл yaml, потому что с аннотациями работает нормально.

Любая идея?.

Спасибо.


person bruli    schedule 23.06.2015    source источник


Ответы (1)


В вашем app/config/config.yml обязательно используйте \\ в качестве разделителя пространства имен вместо \:

jms_serializer:
    metadata:
        auto_detection: true
        directories:
            CORE:
                namespace_prefix: "Core\\Domain\\Model"
                path: "%kernel.root_dir%/Resources/serializer/CORE"

В противном случае обратная косая черта рассматривается как escape-символы для следующих букв.

Изменить: также убедитесь, что конфигурация сериализатора JMS имеет правильное имя. Для класса Core\Domain\Model\Product\Product нужен файл Product.Product.yml внутри указанного path конфига. В вашем примере ваш файл называется Model.Product.yml.

Итак, чтобы получить имя файла конфигурации сериализатора для объекта в целом:

  1. Удалите namespace, определенный в конфигурации, из имени класса.
  2. замените разделители пространств имен \ на .
  3. добавьте .yml и поместите файл в папку path, определенную в конфигурации
person Fabian Keller    schedule 23.06.2015
comment
Я только что обновил ответ, так как заметил дополнительную ошибку в именовании файлов. - person Fabian Keller; 23.06.2015
comment
Я не уверен, что понимаю тебя. Я изменил Product.yml на Product.Product.yml, и результат тот же. Я также изменил Product.yml на Core.Domain.Model.Product.Product.yml, и результат тот же. Я не понимаю, что происходит. - person bruli; 23.06.2015
comment
[РЕШЕНО] С файлом Products.Products.yml работает нормально. Требуется очистка кеша. Спасибо за все. - person bruli; 23.06.2015
comment
Я рад, что вы решили это. Буду признателен, если вы примете ответ. Спасибо. - person Fabian Keller; 23.06.2015