gpt4 book ai didi

php - Laravel API 资源隐藏 key

转载 作者:行者123 更新时间:2023-12-04 17:31:37 24 4
gpt4 key购买 nike

我有一个名为 FilmResource 的 API 资源,我已将一个名为 is_new 的新属性 append 到模型,并将此新属性添加到资源文件中,问题是我有两个使用此 API 资源的端点,它为两个端点返回属性,但我只希望为一个方法返回它,有没有一种方法可以指定要在响应中返回的某些键?如果我使用 makeVisible 它没有任何区别,因为它仅来自 API 资源。

电影 Controller

这是我希望它返回的方法,我有另一个类似的方法,但我不希望它为此返回。

public function show(string $id)
{
$film = Film::findOrFail($id);

return new FilmResource($film);
}

电影资源

  public function toArray($request)
{
return [
'id' => $this->id,
'description' => $this->description,
'name' => $this->name,
'is_new' => $this->is_new
}

API 资源是否会覆盖您在隐藏/可见数组中设置的属性?

当您在 Controller 中返回 key 时,您能否指定要从 API 资源中隐藏 key ?

最佳答案

让我举例说明如何使用两种不同的 api 资源来解决您的问题。

在这个例子中,当创建一个电影(api store 方法)时,我们将显示所有字段,但在可视化(api show 方法)时我们将只显示几个字段:

namespace App\Http\Resources\Film;

use Illuminate\Http\Resources\Json\JsonResource;

class Store extends JsonResource {
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'description' => $this->description,
'name' => $this->name,
'is_new' => $this->is_new
];
}
}

namespace App\Http\Resources\Film;

class Show extends Store {
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return Arr::except(
parent::toArray($request),
[
'is_new'
]
);
}
}

请注意,我们正在从最完整的响应到不太完整的响应进行编写,所以我只有一个类具有关于如何输出数据的完整定义,而其他类通过删除一些字段来使用它(也可以做任何需要的转换)。

我建议的另一种方法是使用请求来了解要显示的内容,但我不喜欢这个解决方案,因为它没有完全分离,你的资源需要知道你的路线,这不是他的工作 IMO。

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class Film extends JsonResource {
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$data = [
'id' => $this->id,
'description' => $this->description,
'name' => $this->name
];

if ($request->isMethod('post')) {
$data['is_new'] = $this->is_new;
}

return $data;
}
}

我的示例中使用的逻辑只是示例,您可能需要适应自己的需求并创建自己的逻辑。

关于php - Laravel API 资源隐藏 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59192183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com