Как обобщить функцию ресурса, которая будет использоваться во всех контроллерах для разных моделей? - PullRequest
1 голос
/ 29 сентября 2019

В ресурсах 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,
        ];
    }
}

обобщать: средства, используемые везде без избыточности кода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...