【发布时间】:2014-01-11 21:46:59
【问题描述】:
我在 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 }} 我得到:
预测 -> 正如我所料 -> 只有公开的字段被序列化
Bricks 集合 -> 所有属性都已序列化 -> 似乎我的 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
编辑:
是的,每次更改 .yml 配置后我都会清除缓存
经过一些建议后,我在 Brick 类中添加了 @ExclusionPolicy("ALL") 注释,并在 ID 上添加了 @Expose,只是为了看看会发生什么......突然它起作用了!不仅暴露了 ID,而且一切都像我的 YML 配置一样。
所以我删除了注释.. 它仍然有效!
所以似乎添加注释以某种方式强制序列化程序识别我的 YML 配置。我不知道为什么。这让我很担心。
APC 缓存是否有罪?我确实多次清除 Symfony2 缓存,但 APC 只清除了几次。
【问题讨论】:
-
如果你只序列化一个单独的砖会发生什么?也尝试使用
rm -r app/cache清除缓存 -
独立程序块已正确序列化。我确实清除了 Symfony2 缓存。现在我想它可能是 APC 缓存。但这可能吗?
-
我总是遇到 jms-bundles 缓存的问题...无论如何缓存中的问题
-
app/console cache:clear不够用,需要通过rm -rf var/cache/移除(对于SF4.x)
标签: symfony serialization jmsserializerbundle