gpt4 book ai didi

php - json_encode 仅适用于带有自定义 toArray 的模型的 JSON_PARTIAL_OUTPUT_ON_ERROR

转载 作者:搜寻专家 更新时间:2023-10-31 21:07:56 25 4
gpt4 key购买 nike

我有一个 Eloquent 模型,为此我创建了一个自定义 toArray() 方法,以包含元表中的字段(我通过使用 eloquent-meta 插件获得):

class User extends Model{

// ... Other stuff
public function toArray(){
return array_merge(parent::toArray(), $this->getAllMeta()->toArray());
}
}

当我现在尝试使用 Response::json(...) 将此模型作为 JSON 响应发送时,我得到:

UnexpectedValueException in Response.php line 403: The Response content must be a string or object implementing __toString(), "boolean" given.

我已将错误追溯到 JsonResponse.setData($data)-method ,其中 json_encode 调用返回 false。 json_last_error() 方法返回 JSON_ERROR_SYNTAXjson_last_error_msg() 方法返回语法错误

使用调试器,我在下面的行上停止并自己评估了语句。正如预期的那样,它不起作用,但是如果我这样调用它,它就会起作用:

json_encode($data, JSON_PARTIAL_OUTPUT_ON_ERROR);

这将返回我期望的完整、有效的 JSON,没有任何缺失值或 NULL 值。

更奇怪的是,如果我在 toArray() 方法中停止并将合并的数组提供给 json_encode,即使没有部分,它也能正常工作。

我是不是忽略了一些明显的东西??

最佳答案

问题出在 eloquent-meta我用的插件。这是来自 my issue 的相关部分:

I traced the error back to the Helpers.maybeDecode($value)-method:

The current implementation tries to parse the value with json_decode($value) and checks, whether that worked, by checking the json_last_error()-function. The problem is, that this doesn't reset the last error.

When the Helpers.maybeDecode($value)-method is called, while Laravel is encoding the model, and the value it tried to decode was not an valid json (for example, a simple string), the error code is set, causing the json_encode()-function to see it and return null. The problem is with the global nature of the error-variable.

My proposed workaround for this is to reset the json_last_error()-function after checking if decoing worked, and the only way I have found to do this is by decoding something valid (even if it's just an empty array).

这是 Pull Request与修复。

关于php - json_encode 仅适用于带有自定义 toArray 的模型的 JSON_PARTIAL_OUTPUT_ON_ERROR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082986/

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