💻 Exemplos: Capítulo 11: Eloquent API Resources e Serialização de Dados REST
Especialização em Backend com PHP & Laravel • Demonstrações Práticas Compiláveis
💻 Exemplo 1 — Resource Individual com Campos Formatados
<?php
// app/Http/Resources/ProdutoResource.php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class ProdutoResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'nome' => $this->nome,
'preco_formatado' => 'R$ ' . number_format($this->preco, 2, ',', '.'),
'categoria' => new CategoriaResource($this->whenLoaded('categoria')),
'custo_interno' => $this->when($request->user()?->is_admin, $this->custo_interno),
'criado_em' => $this->created_at->toISOString(),
];
}
}
💻 Exemplo 2 — Usando o Resource no Controller (Item e Coleção)
<?php
// app/Http/Controllers/ProdutoController.php
namespace App\Http\Controllers;
use App\Http\Resources\ProdutoResource;
use App\Models\Produto;
class ProdutoController extends Controller
{
public function show(Produto $produto)
{
return new ProdutoResource($produto->load('categoria'));
}
public function index()
{
$produtos = Produto::with('categoria')->paginate(20);
return ProdutoResource::collection($produtos);
}
}
💻 Exemplo 3 — ResourceCollection com Metadados Customizados
<?php
// app/Http/Resources/ProdutoCollection.php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class ProdutoCollection extends ResourceCollection
{
public function toArray($request): array
{
return [
'data' => $this->collection,
'meta' => [
'total' => $this->collection->count(),
'gerado_em' => now()->toISOString(),
],
];
}
}