Laravel JsonResource (resource collection) 添加额外数据到响应
Laravel JsonResource (resource collection) add extra data to response
我正在使用 laravel (v7) 资源,我有一个扩展 JsonResource
的资源,我通过分页从控制器调用这个资源。我想在 data
数组旁边添加附加属性 extra
,如下所示:
{
"data": [
],
"links": {
},
"meta": {
},
"extra": {
....
}
}
JsonResource 的问题在于它们无法使用方法 with
。我尝试将以下内容添加到我的资源 collection 但没有任何区别。
public function with($request)
{
return [
'extra' => [
'key' => 'value',
],
];
}
到目前为止,我发现唯一可行的方法是从链接到资源本身的控制器中调用 additional() 方法,例如:
return (new UserCollection(User::all()->load('roles')))
->additional(['extra' => [
'key' => 'value',
]]);
但我想从资源本身添加一些数据,而这些额外数据在控制器中不可用。有办法吗?
编辑:
这是我的资源 collection
class UserCollection extends JsonResource
{
protected $result = [];
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
$this->result = [
"attributes" =>[
"id" => $this->id,
'name' => $this->name,
'position' => $this->position,
],
] ;
return $this->result;
}
public function with($request)
{
return [
'extra' => [
'key' => 'value',
],
];
}
}
控制器是这样调用的
$users = User::where('is_available', 1)->get();
$users = $users->paginate();
return UserCollection::collection($users);
通过 运行 php artisan make:resource user
和 php artisan make:resource userCollection
.
在两个文件中创建 JsonResource
和 ResourceCollection
您将在同一个文件夹中有两个单独的文件,user.php
和 userCollection.php
。
使用 user.php 这是 JsonResource 自定义您的属性并使用 userCollection.php
供参考https://laravel.com/docs/9.x/eloquent-resources#resource-collections
我正在使用 laravel (v7) 资源,我有一个扩展 JsonResource
的资源,我通过分页从控制器调用这个资源。我想在 data
数组旁边添加附加属性 extra
,如下所示:
{
"data": [
],
"links": {
},
"meta": {
},
"extra": {
....
}
}
JsonResource 的问题在于它们无法使用方法 with
。我尝试将以下内容添加到我的资源 collection 但没有任何区别。
public function with($request)
{
return [
'extra' => [
'key' => 'value',
],
];
}
到目前为止,我发现唯一可行的方法是从链接到资源本身的控制器中调用 additional() 方法,例如:
return (new UserCollection(User::all()->load('roles')))
->additional(['extra' => [
'key' => 'value',
]]);
但我想从资源本身添加一些数据,而这些额外数据在控制器中不可用。有办法吗?
编辑: 这是我的资源 collection
class UserCollection extends JsonResource
{
protected $result = [];
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
$this->result = [
"attributes" =>[
"id" => $this->id,
'name' => $this->name,
'position' => $this->position,
],
] ;
return $this->result;
}
public function with($request)
{
return [
'extra' => [
'key' => 'value',
],
];
}
}
控制器是这样调用的
$users = User::where('is_available', 1)->get();
$users = $users->paginate();
return UserCollection::collection($users);
通过 运行 php artisan make:resource user
和 php artisan make:resource userCollection
.
JsonResource
和 ResourceCollection
您将在同一个文件夹中有两个单独的文件,user.php
和 userCollection.php
。
使用 user.php 这是 JsonResource 自定义您的属性并使用 userCollection.php
供参考https://laravel.com/docs/9.x/eloquent-resources#resource-collections