В ресурсах API laravel:
Мне нужен динамический способ обобщения кода для всех ресурсов, который будет использоваться во всех контроллерах, вместо использования ресурсов во всех методах для каждого контроллера.для большей ясности у меня есть черта, которая включает обобщенные функции, которые возвращают ответы json с данными и кодом состояния, давайте возьмем «примерную функцию», предположим, что это showAll (Collection $ collection) , которое используется для возвратанапример, сбор данных указанной модели используется для возврата данных всех пользователей .. , поэтому мне нужно создать функцию, которая будет вызывать любой ресурс указанной модели, зная, что у меня много моделей ...
a) признак, включающий метод showAll:
<?php
namespace App\Traits;
use Illuminate\Support\Collection;
trait ApiResponser
{
private function successResponse($data, $code) {
return response()->json($data, $code);
}
protected function showAll(Collection $collection, $code = 200) {
$collection = $this->resourceData($collection);
$collection = $this->filterData($collection);
$collection = $this->sortData($collection);
$collection = $this->paginate($collection);
$collection = $this->cacheResponse($collection);
return $this->successResponse([$collection, 'code' => $code], $code);
}
protected function resourceData(Collection $collection) {
return $collection;
}
}
b) пользовательский контроллер в качестве образца
<?php
namespace App\Http\Controllers\User;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\ApiController;
class UserController extends ApiController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$users = User::all();
// Here the showAll(Collection $collection) is used
return $this->showAll($users);
}
}
в) UserResource:
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'identity' => $this->id,
'name' => $this->name,
'email' => $this->email,
'isVerified' => $this->verified,
'isAdmin' => $this->admin,
'createDate' => $this->created_at,
'updateDate' => $this->updated_at,
'deleteDate' => $this->deleted_at,
];
}
}
обобщать: средства, используемые везде без избыточности кода