在新的Laravel资源类中,您可以根据自己喜欢的任何内容删除属性。
如果要返回许多项目,可以使用
功能Resource::collection()
但这不允许您在一个地方添加元数据。输入一个集合,很棒,这是一个很好的格式的项目,能够添加元数据。但你不能做的是过滤你必须隐藏属性的集合,就像你可以用资源一样。我能看到的唯一方法是
foreach ($this->collection as $item) {
if ($notAdmin) {
$temp = array_except($item->toArray(), ['secret']);
}
$temp['links'] = ['self' => route('restaurant.show', [$item])];
$data[] = $temp;
}
我有什么遗失的吗?这似乎是资源收集的一个巨大的被忽视的能力
答案 0 :(得分:3)
基于this线程,似乎在使用ResourceCollection类来自定义集合时(例如BookCollection
),Laravel会查找Resource
类命名相同,但没有 Collection sufix类(在示例中,名为just Book
的类)。
因此,您需要拥有一个名为Book
的资源类,您可以在其中自定义要返回到响应的属性,以及一个名为BookCollection
的集合类,它将使用Book
- 自定义数据 - 还可以自定义元数据。
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
class Book extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
];
}
}
<?php
namespace App\Http\Resources\Users;
use Illuminate\Http\Resources\Json\ResourceCollection;
class BookCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return $this->collection;
}
public function with($request)
{
return [
'meta' => [
'key' => 'value',
],
];
}
}
答案 1 :(得分:0)
好的,这是你如何做到的: