使用资源将数组作为对象返回
Array is returned as an object using resource
发生了一些奇怪的事情。
我得到了这样的数组:
=> [
"optionalinformation" => [
"domain" => [
"type" => "string",
],
],
]
这个数组被一个资源使用,如果我使用 tinker 像这样检查这个资源:
$result = App\Http\Resources\ProductResource::make(Product::find(2));
is_array($result->optionalinformation);
在这种情况下,结果是 true
:这是一个数组。
但是如果 axios 获取结果,我得到这个:
"optionalinformation": {
"domain": {
"type": "string"
},
它不再是一个数组而是一个对象。知道为什么会这样吗?
这是我的 api-资源:
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'optionalinformation' => $this->optionalinformation,
];
}
这里有点混乱,主要是 PHP 行话造成的。
在PHP 行话中,关联数组仍然是数组。但是关联数组实际上是一个字典。
其他编程语言不将关联数组(字典)视为数组,因此具有不同的词汇表。
你的数据结构实际上是一个字典,而不是一个数字索引数组。
从 JSON 的角度来看,如果您的数据结构具有非数字键,那么它会被转换为一个对象。
您的困惑源于以下事实:如果变量是从零开始的索引数组,is_array
将 return 为真,而实际上对于关联数组也是 return 为真。
在定义中。 Laravel's resource classes allow you to expressively and easily transform your models and model collections into JSON.
检查 Resource docs
如果您期望 return 中的数组,那么我建议跳过资源并使用 ->toArray()
直接从控制器传递数据。但是话又说回来,你在你的 vuejs 中使用 axios
那么我强烈建议坚持使用 json
格式作为预期的响应。
发生了一些奇怪的事情。
我得到了这样的数组:
=> [
"optionalinformation" => [
"domain" => [
"type" => "string",
],
],
]
这个数组被一个资源使用,如果我使用 tinker 像这样检查这个资源:
$result = App\Http\Resources\ProductResource::make(Product::find(2));
is_array($result->optionalinformation);
在这种情况下,结果是 true
:这是一个数组。
但是如果 axios 获取结果,我得到这个:
"optionalinformation": {
"domain": {
"type": "string"
},
它不再是一个数组而是一个对象。知道为什么会这样吗?
这是我的 api-资源:
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
*
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'optionalinformation' => $this->optionalinformation,
];
}
这里有点混乱,主要是 PHP 行话造成的。
在PHP 行话中,关联数组仍然是数组。但是关联数组实际上是一个字典。
其他编程语言不将关联数组(字典)视为数组,因此具有不同的词汇表。
你的数据结构实际上是一个字典,而不是一个数字索引数组。
从 JSON 的角度来看,如果您的数据结构具有非数字键,那么它会被转换为一个对象。
您的困惑源于以下事实:如果变量是从零开始的索引数组,is_array
将 return 为真,而实际上对于关联数组也是 return 为真。
在定义中。 Laravel's resource classes allow you to expressively and easily transform your models and model collections into JSON.
检查 Resource docs
如果您期望 return 中的数组,那么我建议跳过资源并使用 ->toArray()
直接从控制器传递数据。但是话又说回来,你在你的 vuejs 中使用 axios
那么我强烈建议坚持使用 json
格式作为预期的响应。