Подтвердить что ты не робот

Почему JMS Serializer игнорирует сопоставления для вложенных коллекций?

У меня есть сущности в отношении OneToMany:

Прогноз → имеет много → Кирпич (ы)

Я создал сопоставления сериализации для каждого в Resources/config/serializer/Entity.xxx.yml, где xxx - имя объекта.

Каждый объект имеет политику исключения, установленную для ALL, и некоторые из ее свойств отображаются, например:

Acme\ForecastBundle\Entity\Forecast:   
  exclusion_policy: ALL   
  xml_root_name: forecast   
  properties:
    id:
      expose: true
      type: integer
    regionUid:
      expose: true
      type: string
    description:
      expose: true
      type: string
    bricks:
      expose: true
      type: array<Acme\ForecastBundle\Entity\Brick>
      xml_list:
        inline: true
        entry_name: brick

Когда в моем шаблоне я делаю {{ forecast|serialize|raw }}, я получаю:

Прогноз → как я и ожидал → только поля с полями сериализованы

Коллекция кирпичей → все свойства сериализованы → кажется, что мой Entity.Brick.yml игнорируется... почему?

В кирпиче у меня есть только ID и имя выставлено.. но в сериализованном выпуске у меня есть все свойства (created_at, updated_at.. и еще).. почему? Они должны быть исключены командой "исключение_политики: ВСЕ". Кажется, что config для вложенной коллекции не используется.

Acme\ForecastBundle\Entity\Brick:   
  exclusion_policy: ALL   
  xml_root_name: brick
  properties:
    id:
      expose: true
      type: integer
    name:
      expose: true
      type: string

EDIT:

Да, я очистил кеш после каждого изменения в .yml config

После некоторых предложений я добавил аннотацию @ExclusionPolicy ( "ALL" ) к классу Brick и @Expose на ID, просто чтобы узнать, что произойдет.. и вдруг это сработает! Отображается не только ID, но все как в моей конфигурации YML.

Итак, я удалил аннотации.. и он все еще работает!

Итак, кажется, что добавление аннотаций каким-то образом вынудило сериализатор распознать мою конфигурацию YML. Однако я не знаю, почему. Меня это беспокоит.

Возможно ли, что кеш APC виноват? Я несколько раз удалял кеш-память Symfony2, но APC только несколько.

4b9b3361

Ответ 1

Поскольку не было андерсеров, я опубликую то, что я в конце концов сделал/узнал (для будущей справки и любого, кто сталкивается с той же проблемой). Я приведу свое редактирование:

После некоторых предложений я добавил аннотацию @ExclusionPolicy ( "ALL" ) к классу Brick и @Expose на ID, просто чтобы узнать, что произойдет.. и вдруг это сработает! Отображается не только ID, но все как в моей конфигурации YML.

Итак, я удалил аннотации.. и он все еще работает!

Итак, кажется, что добавление аннотаций каким-то образом вынудило сериализатор распознать мою конфигурацию YML. Однако я не знаю, почему. Меня это беспокоит.

Ответ 2

Видимо добавив использование JMS\Serializer\Annotation\ExclusionPolicy; для объекта достаточно.

Я предполагаю, что он не работает, потому что мы не реализовали класс для этого.