Especialização em Backend com PHP & Laravel • Demonstrações Práticas Compiláveis


💻 Exemplo 1 — Middleware de Rota e Registro com Alias

<?php
// app/Http/Middleware/CheckApiVersion.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class CheckApiVersion
{
    public function handle(Request $request, Closure $next): Response
    {
        $response = $next($request);
        $response->headers->set('X-Api-Version', '1.0');
        return $response;
    }
}
<?php
// bootstrap/app.php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->append(\App\Http\Middleware\CheckApiVersion::class);
        $middleware->alias([
            'api.version' => \App\Http\Middleware\CheckApiVersion::class,
        ]);
    })->create();

💻 Exemplo 2 — Middleware de Manutenção com Bypass por IP

<?php
// app/Http/Middleware/MaintenanceBypass.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class MaintenanceBypass
{
    private array $allowedIps = ['192.168.1.100', '127.0.0.1'];

    public function handle(Request $request, Closure $next)
    {
        if (app()->isDownForMaintenance() && !in_array($request->ip(), $this->allowedIps, true)) {
            return response()->json(['erro' => 'Sistema em manutenção'], 503);
        }

        return $next($request);
    }
}

💻 Exemplo 3 — Tratamento Global de Exceções para uma API JSON

<?php
// bootstrap/app.php
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Validation\ValidationException;

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->render(function (ModelNotFoundException $e) {
        return response()->json(['erro' => 'Recurso não encontrado'], 404);
    });

    $exceptions->render(function (AuthorizationException $e) {
        return response()->json(['erro' => 'Ação não autorizada'], 403);
    });

    $exceptions->render(function (ValidationException $e) {
        return response()->json([
            'erro' => 'Dados inválidos',
            'detalhes' => $e->errors(),
        ], 422);
    });
})