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

Метод toArray

Метод toArray класса JsonResource определяет, какие атрибуты модели должны быть включены в ответ JSON API. Этот метод вызывается автоматически при преобразовании ресурса в JSON. Первым параметром метод принимает объект запроса Request, на основе которого можно динамически изменять состав возвращаемых данных.

Синтаксис

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

Пример

Давайте создадим ресурс для модели User и определим базовые поля для возврата:

<?php namespace App\Http\Resources; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class UserResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->id, 'name' => $this->name, 'email' => $this->email, 'created_at' => $this->created_at, ]; } } ?>

Используем созданный ресурс в контроллере:

<?php namespace App\Http\Controllers; use App\Models\User; use App\Http\Resources\UserResource; class UserController extends Controller { public function show($id) { $user = User::find($id); return new UserResource($user); } } ?>

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

{ "data": { "id": 1, "name": "John Doe", "email": "john@example.com", "created_at": "2024-01-15T10:30:00.000000Z" } }

Пример

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

<?php namespace App\Http\Resources; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class UserResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->id, 'name' => $this->name, 'email' => $this->email, 'is_admin' => $this->when($request->user()->isAdmin(), $this->is_admin), 'phone' => $this->when($request->has('include_phone'), $this->phone), ]; } } ?>

Пример

Включим в ресурс связь с другой моделью, используя вложенные ресурсы:

<?php namespace App\Http\Resources; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class PostResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, 'author' => new UserResource($this->whenLoaded('user')), 'comments' => CommentResource::collection($this->whenLoaded('comments')), 'created_at' => $this->created_at, ]; } } ?>

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

{ "data": { "id": 5, "title": "Laravel JSON Resources", "content": "Article content here...", "author": { "id": 2, "name": "Jane Smith", "email": "jane@example.com" }, "comments": [ { "id": 1, "text": "Great article!", "user_id": 3 } ], "created_at": "2024-02-20T15:45:00.000000Z" } }

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

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