0

我有一个小问题要解决。在我的应用程序中,我正在处理很多模型,每个模型都有类似的东西:

  • 模型资源
  • 模型资源集合
  • 模型资源概览
  • 模型资源概览集合

原因是:有时我不需要所有可见的信息,如果我使用ModelResource- 在这种情况下我调用ModelResourceOverview.

例子

邮政资源

- title
- tags
- content
- author

例子

PostOverviewResource

- title
- author

因为我有很多模型,所以我有大量的 ApiResource-Classes,我想摆脱它。

我考虑过$this->when在资源中使用并将“完整”或“概述”之类的内容传递给控制器​​中的请求。

例子

$data
    = new PostResource($this->post);

所以我的问题是:这是将其添加到的最佳方式request还是有更方便/更好的方式来处理这个?

4

2 回答 2

0

如果您关于“可见与否”的逻辑与当前请求绑定,那么您应该使用whenmergeWhen如您所提到的(此处的所有内容https://laravel.com/docs/7.x/eloquent-resources#conditional-attributes),因此您将只有 2 个资源而不是 4 个

public function toArray($request)
{
    return [
        'title' => $this->title,
        'author' => $this->author,
        $this->mergeWhen($this->needsFullData($request), [
            'tags' => $this->tags,
            'content' => $this->content,
        ]),
    ];
}

protected function needsFullData($request)
{
    //Your logic
}
于 2020-05-11T10:04:43.303 回答
0

Laravel 有一种即时隐藏字段的方法:Hiding attributes from json

例如

return $post->makeHidden('content')->toArray();
于 2020-05-11T10:02:58.477 回答