Метод 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,
который используется для коллекций ресурсов