【问题标题】:API Platform "Unexpected non-object value for object property."API 平台“对象属性的意外非对象值。”
【发布时间】:2021-12-29 07:29:39
【问题描述】:

我正在尝试将 API 平台序列化与计算字段一起使用,如此处 https://api-platform.com/docs/core/serialization/#calculated-field

这里是代码

/**
 * @Groups({
 *     "read:actionJeu"
 * })
 */
public function getTimePassed(){
    return 4;
}

规范化上下文是normalizationContext={"groups"={"read:actionJeu"}, "enable_max_depth"=true}

问题是当我做return 4时,它会显示这个错误

但是当我将返回值更改为其他内容时(例如 return new \DateTime('now') ),我就可以正常工作了。

我想知道为什么会这样,我也尝试过使用字符串,但它不起作用。

【问题讨论】:

    标签: php symfony serialization api-platform.com


    【解决方案1】:

    我假设您的实体属性 $timePassed 是 DateTime 类型。 getTimePassed() 方法的返回类型也必须是 DateTime 类型。您可以将属性 $timePassed 的类型更改为 int 而不是 DateTime 或进行自定义 TimePassedSerializer 服务。

    /** this **/
    private int $timePasede;
    /** insted of this **/
    private DateTime $timePasede
    

    【讨论】:

      【解决方案2】:

      可能是API平台核心包版本造成的。

      尝试安装 2.6.82.6.6 版本。

      我在 2.6.7 上处理同样的事情。

      【讨论】:

        【解决方案3】:

        例子定义了函数的返回类型,以: int结尾,这样就清楚这个函数会返回一个整数。

        我猜在定义不同的返回类型之前,api-platform 会默认一个对象。

        所以根据我的理解,这应该有效。请注意,我没有测试它,因为我现在没有可能。

        /**
         * @Groups({
         *     "read:actionJeu"
         * })
         */
        public function getTimePassed(): int {
            return 4;
        }
        

        【讨论】:

          猜你喜欢
          • 2018-05-11
          • 1970-01-01
          • 2018-11-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多