Помимо создания ресурсов, преобразующих отдельные модели, имеется возможность создавать ресурсы, отвечающие за преобразование коллекций моделей. Это позволяет ответам JSON включать ссылки и другую метаинформацию, имеющую отношение ко всей коллекции конкретного ресурса.
Чтобы сгенерировать новую коллекцию ресурса, нужно использовать флаг --collection
при создании ресурса, или включить слово Collection
в имя ресурса при его создании. Это укажет Laravel, что он должен создать коллекцию ресурса. Коллекции ресурса расширяют класс Illuminate\Http\Resources\Json\ResourceCollection
:
php artisan make:resource User --collection php artisan make:resource UserCollection
После создания класса коллекции ресурса, можно легко определить любые метаданные, которые должны быть включены в ответ:
namespace App\Http\Resources; use Illuminate\Http\Resources\Json\ResourceCollection; class UserCollection extends ResourceCollection { /** * Преобразовать коллекцию ресурса в массив. * * @param \Illuminate\Http\Request $request * @return array */ public function toArray($request) { return [ 'data' => $this->collection, 'links' => [ 'self' => 'link-value', ], ]; } }
После определения коллекции ресурса, ее можно вернуть из маршрута или контроллера:
use App\Http\Resources\UserCollection; use App\Models\User; Route::get('/users', function () { return new UserCollection(User::all()); });
Практика