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(),
            ],
        ];
    }
}