php – 用于集合的Laravel 5.5 API资源(独立数据)
发布时间:2020-12-14 19:45:26 所属栏目:大数据 来源:网络整理
导读:我想知道是否可以为项目资源和集合资源定义不同的数据. 对于收集我只想发送[‘id’,’title’,’slug’],但项目资源将包含额外的细节[‘id’,’slug’,’user’等] 我希望实现以下目标: class PageResource extends Resource{ /** * Transform the resource
我想知道是否可以为项目资源和集合资源定义不同的数据.
对于收集我只想发送[‘id’,’title’,’slug’],但项目资源将包含额外的细节[‘id’,’slug’,’user’等] 我希望实现以下目标: class PageResource extends Resource { /** * Transform the resource into an array. * * @param IlluminateHttpRequest * @return array */ public function toArray($request) { return [ 'id' => $this->id,'title' => $this->title,'slug' => $this->slug,'user' => [ 'id' => $this->user->id,'name' => $this->user->name,'email' => $this->user->email,],]; } } class PageResourceCollection extends ResourceCollection { /** * Transform the resource collection into an array. * * @param IlluminateHttpRequest * @return array */ public function toArray($request) { return [ 'id' => $this->id,]; } } PageResourceCollection将无法按预期工作,因为它使用PageResource所需 return [ 'data' => $this->collection,]; 我可以将资源复制到PageFullResource / PageListResource和PageFullResourceCollection / PageListResourceCollection中,但我试图找到一种更好的方法来实现相同的结果.
Resource类上有一个集合方法.您可以将其作为参数输入返回到ResourceCollection,然后在集合上指定转换.
控制器: class PageController extends Controller { public function index() { return new PageResourceCollection(PageResource::collection(Page::all())); } public function show(Page $page) { return new PageResource($page); } } 资源: class PageResource extends Resource { public function toArray($request) { return [ 'id' => $this->id,]; } } class PageResourceCollection extends ResourceCollection { public function toArray($request) { return [ 'data' => $this->collection->transform(function($page){ return [ 'id' => $page->id,'title' => $page->title,'slug' => $page->slug,]; }),]; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |