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

Метод wrap

Метод wrap класса JsonResource позволяет задать пользовательское имя для ключа, в который будут помещены данные ресурса при сериализации в JSON. По умолчанию используется ключ 'data'. Первым параметром передаётся строка с именем обёртки. Метод вызывается статически и возвращает тот же класс ресурса с изменённой обёрткой.

Синтаксис

<?php JsonResource::wrap($wrapper); ?>

Пример

Давайте изменим обёртку для данных ресурса на 'users':

<?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, ]; } } ?>
<?php namespace App\Http\Controllers; use App\Models\User; use App\Http\Resources\UserResource; use Illuminate\Http\Request; class UserController extends Controller { public function index() { $users = User::all(); // Устанавливаем кастомную обёртку UserResource::wrap('users'); return UserResource::collection($users); } } ?>

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

{ "users": [ { "id": 1, "name": "John Doe", "email": "john@example.com" }, { "id": 2, "name": "Jane Smith", "email": "jane@example.com" } ] }

Пример

Давайте изменим обёртку для данных ресурса на 'articles':

<?php namespace App\Http\Resources; use Illuminate\Http\Request; use Illuminate\Http\Resources\Json\JsonResource; class ArticleResource extends JsonResource { public function toArray(Request $request): array { return [ 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, ]; } } ?>
<?php namespace App\Http\Controllers; use App\Models\Article; use App\Http\Resources\ArticleResource; use Illuminate\Http\Request; class ArticleController extends Controller { public function show() { $article = Article::find(1); // Устанавливаем кастомную обёртку ArticleResource::wrap('articles'); return new ArticleResource($article); } } ?>

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

{ "articles": { "id": 1, "title": "Laravel Tutorial", "content": "Lorem ipsum dolor sit amet." } }

Пример

Давайте отключим обёртку данных для ресурса, передав null:

<?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, 'body' => $this->body, ]; } } ?>
<?php namespace App\Http\Controllers; use App\Models\Post; use App\Http\Resources\PostResource; use Illuminate\Http\Request; class PostController extends Controller { public function index() { $posts = Post::all(); // Отключаем обёртку PostResource::wrap(null); return PostResource::collection($posts); } } ?>

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

[ { "id": 1, "title": "First Post", "body": "Content of first post" }, { "id": 2, "title": "Second Post", "body": "Content of second post" } ]

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

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