2 つの異なる 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'
]
);
}
}
最も完全な応答から不完全な応答まで書いていることに注意してください。そのため、データの出力方法に関する完全な定義を持つクラスは 1 つしかなく、他のクラスはいくつかのフィールドを削除してそれを使用します (また、必要な変換を行うこともできます)。 )。
私が提案したもう1つの方法は、リクエストを使用して何を表示するかを知ることですが、完全に分離されていないため、このソリューションは好きではありません。リソースはルートについて知る必要があり、それは彼の仕事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;
}
}
私の例で使用されているロジックは単なる例です。独自のニーズに合わせて独自のロジックを作成する必要がある場合があります。