为什么JMS Serializer忽略嵌套集合的映射?

iol*_*leo 12 serialization symfony jmsserializerbundle

我有OneToMany关系中的实体:

预测 - >有很多 - >砖块

我为Resources/config/serializer/Entity.xxx.ymlxxx是实体名称的每个人创建了序列化映射.

每个实体都将排除策略设置为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
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我{{ forecast|serialize|raw }}得到了:

预测 - >正如我所料 - >只有暴露的字段被序列化

砖块集合 - >所有属性都被序列化 - >似乎我Entity.Brick.yml被忽略了......为什么?

在砖块我只有ID和名称暴露..但在序列化输出我有所有属性(created_at,updated_at ..等等)..为什么?它们应该被"exclusion_policy:ALL"排除在外.似乎没有使用嵌套集合的配置.

Acme\ForecastBundle\Entity\Brick:   
  exclusion_policy: ALL   
  xml_root_name: brick
  properties:
    id:
      expose: true
      type: integer
    name:
      expose: true
      type: string
Run Code Online (Sandbox Code Playgroud)

编辑:

是的,我在.yml配置中的每次更改后都清除了缓存

在提出一些建议之后,我将@ExclusionPolicy("ALL")注释添加到Brick类和@Expose on ID,只是为了看看会发生什么......然后它突然起作用了!不仅暴露了ID,而且一切都像我的YML配置.

所以我删除了注释..它仍然有效!

因此,似乎添加Annotations以某种方式强制序列化程序识别我的YML配置.我不知道为什么.这让我担心.

是否有可能APC缓存有罪?我确实清楚了很多次Symfony2缓存,但APC只有几个.

iol*_*leo 10

由于没有anwsers,我会发布我最终做/发现的内容(供将来参考和遇到同样问题的人).我引用我的编辑:

在提出一些建议之后,我将@ExclusionPolicy("ALL")注释添加到Brick类和@Expose on ID,只是为了看看会发生什么......然后它突然起作用了!不仅暴露了ID,而且一切都像我的YML配置.

所以我删除了注释..它仍然有效!

因此,似乎添加Annotations以某种方式强制序列化程序识别我的YML配置.我不知道为什么.这让我担心.

  • 更新:您是否尝试清除缓存?我尝试重现此现象,并且有几次,我意识到app / console cache:clear并未清除jms_serializer缓存,从而导致了这种现象。向实体添加注释将强制重新创建缓存。 (2认同)