gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:53:34 24 4
gpt4 key购买 nike

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

我有一个具有属性“价格”(与另一个实体相关)和“补充”(这是一个自引用关系)的实体产品。当我得到一个产品时我需要价格,但在列出补充时,我不需要补充产品中的价格,有什么方法可以避免只在补充中获得属性价格?就像是

$normalizer->setIgnoredAttributes(array('complement->prices'));

最佳答案

有几种方法可以实现这一点:

  • 使用序列化器注释并指定不同的序列化组
  • 使用 CustomNormalizer 并使您的产品实现 NormalizableInterface
  • 编写一个只支持你的自定义规范器类 Product实体。


  • 序列化组

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

    序列化时,您可以通过 $context 指定数组要序列化的序列化组,序列化器只会序列化该组的成员。
    NormalizableInterface
    通过实现 NormalizableInterface在您的 Product实体,您将规范化的责任传递给实体本身。它决定了最终标准化产品的外观。

    通过在 $context 中传递一些信息/标志数组,您确保产品实体的规范化逻辑将知道它当前是规范化标准产品还是补充。

    自定义规范器类

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

    $context逻辑必须在这里适用,就像前面的例子一样。

    关于php - 防止 symfony 序列化程序到某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36620160/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com