РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
509 of 1392 menu

Класс JsonResource

Класс JsonResource применяется для формирования JSON-ответов в Laravel. Он преобразует Eloquent-модели и коллекции в структурированный JSON, позволяя управлять форматом данных в едином месте. Ресурсы содержат метод toArray, который определяет структуру выходных данных. Первым параметром в метод toArray передаётся объект Request, который позволяет учитывать контекст запроса при формировании ответа.

Синтаксис

<?php class ResourceName extends JsonResource { public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, ]; } } ?>

Пример

Давайте создадим ресурс для модели Article:

<?php namespace AppHttpResources; use IlluminateHttpResourcesJsonJsonResource; class ArticleResource extends JsonResource { public function toArray($request) { return [ 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, 'created_at' => $this->created_at, ]; } } ?>

Пример

Теперь используем ресурс в контроллере для возврата одной записи:

<?php namespace AppHttpControllers; use AppHttpResourcesArticleResource; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function show($id) { $article = Article::find($id); return new ArticleResource($article); } } ?>

Результат выполнения кода:

{ "data": { "id": 1, "title": "article 1", "content": "text", "created_at": "2026-01-01T10:00:00.000000Z" } }

Пример

Для возврата коллекции используйте статический метод collection:

<?php namespace AppHttpControllers; use AppHttpResourcesArticleResource; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function index() { $articles = Article::all(); return ArticleResource::collection($articles); } } ?>

Результат выполнения кода:

{ "data": [ { "id": 1, "title": "article 1", "content": "text", "created_at": "2026-01-01T10:00:00.000000Z" }, { "id": 2, "title": "article 2", "content": "text", "created_at": "2026-01-02T10:00:00.000000Z" } ] }

Пример

Ресурс может включать связанные данные через отношения модели:

<?php namespace AppHttpResources; use IlluminateHttpResourcesJsonJsonResource; class ArticleResource extends JsonResource { public function toArray($request) { return [ 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, 'author' => new UserResource($this->whenLoaded('user')), 'created_at' => $this->created_at, ]; } } ?>

Метод whenLoaded добавляет отношение только если оно было загружено через with в запросе.

Смотрите также

  • метод toArray,
    который определяет структуру данных ресурса
  • метод with,
    который добавляет дополнительные данные к ответу
  • метод additional,
    который добавляет мета-данные к ресурсу
  • класс ResourceCollection,
    который используется для трансформации коллекций
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить