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

Метод with

Метод with класса JsonResource применяется для включения дополнительной информации в JSON-ответ. Этот метод возвращает массив, который будет объединён с основными данными ресурса. Обычно используется для передачи метаданных, таких как сообщения об успехе, коды ошибок, информация о пагинации или дополнительные вычисляемые значения.

Синтаксис

<?php use Illuminate\Http\Resources\Json\JsonResource; class ExampleResource extends JsonResource { public function toArray($request) { return [ 'id' => $this->id, 'title' => $this->title, ]; } public function with($request) { return [ 'key' => 'value', ]; } } ?>

Пример

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

<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\JsonResource; class ArticleResource extends JsonResource { public function toArray($request) { return [ 'id' => $this->id, 'title' => $this->title, 'content' => $this->content, 'created_at' => $this->created_at, ]; } public function with($request) { return [ 'success' => true, 'message' => 'Article retrieved successfully', 'timestamp' => now()->toISOString(), ]; } } ?>

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

<?php namespace App\Http\Controllers; use App\Models\Article; use App\Http\Resources\ArticleResource; class ArticleController extends Controller { public function show($id) { $article = Article::find($id); if (!$article) { return response()->json([ 'success' => false, 'message' => 'Article not found', ], 404); } return new ArticleResource($article); } } ?>

Результат выполнения кода при запросе к /api/articles/1:

{ "data": { "id": 1, "title": "Laravel Fundamentals", "content": "Full article content here...", "created_at": "2026-01-15T10:30:00.000000Z" }, "success": true, "message": "Article retrieved successfully", "timestamp": "2026-09-07T14:20:00.000000Z" }

Пример

Рассмотрим использование with для добавления информации о пагинации при работе с коллекциями:

<?php namespace App\Http\Resources; use Illuminate\Http\Resources\Json\ResourceCollection; class ArticleCollection extends ResourceCollection { public function toArray($request) { return [ 'data' => ArticleResource::collection($this->collection), ]; } public function with($request) { return [ 'meta' => [ 'total' => $this->total(), 'per_page' => $this->perPage(), 'current_page' => $this->currentPage(), 'last_page' => $this->lastPage(), ], 'success' => true, ]; } } ?>

Использование в контроллере:

<?php namespace App\Http\Controllers; use App\Models\Article; use App\Http\Resources\ArticleCollection; class ArticleController extends Controller { public function index() { $articles = Article::paginate(10); return new ArticleCollection($articles); } } ?>

Результат выполнения кода при запросе к /api/articles:

{ "data": [ { "id": 1, "title": "Laravel Fundamentals", "content": "Full article content here...", "created_at": "2026-01-15T10:30:00.000000Z" }, { "id": 2, "title": "Eloquent Relationships", "content": "Full article content here...", "created_at": "2026-01-16T12:45:00.000000Z" } ], "meta": { "total": 25, "per_page": 10, "current_page": 1, "last_page": 3 }, "success": true }

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

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