💻 Exemplos: Capítulo 04: Middlewares Globais e de Rota, Tratamento de Exceções
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);
});
})