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

Команда make:resource

Команда make:resource создаёт новый класс ресурса в директории app/Http/Resources. Ресурс служит промежуточным слоем между моделями Eloquent и ответом API. Первым параметром передаётся имя класса ресурса. Опционально можно использовать флаг --collection для создания ресурса-коллекции. По умолчанию создаётся ресурс для одной модели.

Синтаксис

php artisan make:resource ResourceName php artisan make:resource ResourceName --collection

Пример

Создадим ресурс для модели 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, 'updated_at' => $this->updated_at, ]; } } ?>

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

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

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

{ "data": { "id": 1, "title": "article 1", "content": "text", "created_at": "2024-01-01 00:00:00", "updated_at": "2024-01-01 00:00:00" } }

Пример

Создадим ресурс-коллекцию для множества моделей:

<?php namespace AppHttpResources; use IlluminateHttpResourcesJsonResourceCollection; class ArticleCollection extends ResourceCollection { public function toArray($request) { return [ 'data' => $this->collection, 'count' => $this->collection->count(), ]; } } ?>

Используем коллекцию в контроллере:

<?php namespace AppHttpControllers; use AppModelsArticle; use AppHttpResourcesArticleCollection; class ArticleController extends Controller { public function index() { $articles = Article::all(); return new ArticleCollection($articles); } } ?>

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

{ "data": [ { "id": 1, "title": "article 1", "content": "text", "created_at": "2024-01-01 00:00:00", "updated_at": "2024-01-01 00:00:00" }, { "id": 2, "title": "article 2", "content": "text", "created_at": "2024-01-02 00:00:00", "updated_at": "2024-01-02 00:00:00" } ], "count": 2 }

Пример

Создадим ресурс с дополнительными вычисляемыми полями:

<?php namespace AppHttpResources; use IlluminateHttpResourcesJsonJsonResource; use CarbonCarbon; class ArticleResource extends JsonResource { public function toArray($request) { return [ 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, 'created_at' => $this->created_at->format('Y-m-d'), 'updated_at' => $this->updated_at->format('Y-m-d'), 'is_new' => $this->created_at->diffInDays(Carbon::now()) < 7, 'short_content' => substr($this->content, 0, 100), ]; } } ?>

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

{ "data": { "id": 1, "title": "article 1", "content": "text", "created_at": "2024-01-01", "updated_at": "2024-01-01", "is_new": true, "short_content": "text" } }

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

  • команда make-model,
    которая создаёт новую модель Eloquent
  • команда make-controller,
    которая создаёт новый контроллер
  • команда make-request,
    которая создаёт класс запроса для валидации
  • команда make-factory,
    которая создаёт фабрику для генерации тестовых данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить