防止symfony序列化程序达到某些属性

jpe*_*ior 2 php symfony

我承认$ normalizer-> setIgnoredAttributes的存在,但我有以下问题.

我有一个实体产品,其属性'价格'(与另一个实体相关)和'补充'(这是一个自我参考关系).当我得到一个产品时我需要价格,但是当列出补充品时,我不需要补充产品中的价格,有没有办法避免仅在补充品中获得属性价格?就像是

$normalizer->setIgnoredAttributes(array('complement->prices'));
Run Code Online (Sandbox Code Playgroud)

Mih*_*ncu 8

有几种方法可以实现此目的:

  1. 使用Serializer注释并指定不同的序列化组
  2. 使用CustomNormalizer并使您的产品实现 NormalizableInterface
  3. 编写一个仅支持Product实体的自定义规范化器类.

序列化组

通过对Product实体的每个属性使用注释,您可以指定是否应该序列化该属性,是否需要别名,或者它是否属于一个或多个组.

序列化时,您可以通过$context数组指定要序列化的序列化组,序列化程序将仅序列化该组的成员.

NormalizableInterface

通过NormalizableInterface在您的Product实体中实施,您将规范化的责任传递给实体本身.它决定了最终标准化产品的外观.

通过在$context数组中传递一些信息/标志,您可以确保产品实体的规范化逻辑将知道它是否正在标准化标准产品或补充.

自定义规范化器类

无需NormalizableInterface在实体上实现,您的新规范化程序类将只接受规范化您的Product实体(或您决定指定的任何内容supportsNormalization).

$context与前面的示例一样,此处必须使用相同的逻辑.