Saltar al contenido principal

Middleware

En Laravel, el middleware es un mecanismo que permite interceptar las solicitudes HTTP antes de que lleguen al controlador o después de que se genere la respuesta. Se utiliza para ejecutar lógica transversal, como autenticación, autorización, logging, manejo de errores o transformación de datos.

Concepto y propósito

Un middleware puede:

  • Ejecutar código antes o después de que la solicitud llegue al controlador.
  • Modificar los objetos de solicitud (Request) o respuesta (Response).
  • Detener la solicitud y devolver una respuesta directamente.
  • Pasar el control al siguiente middleware mediante $next($request).

Middleware global y de ruta

Middleware global

Se aplica a todas las rutas de la aplicación y se registra en app/Http/Kernel.php dentro del array $middleware:

protected $middleware = [
\App\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];

Middleware por ruta o grupo

Se puede asignar a rutas individuales o grupos de rutas:

Route::middleware(['auth'])->group(function () {
Route::get('/perfil', function () {
return 'Perfil del usuario';
});

Route::get('/dashboard', function () {
return 'Panel de administración';
});
});

También se puede aplicar directamente a una ruta específica:

Route::get('/admin', function () {
return 'Administración';
})->middleware('auth', 'checkRole:admin');

Creación de middleware personalizado

Para crear un middleware propio:

php artisan make:middleware VerificarRol

Ejemplo de middleware que verifica el rol del usuario:

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class VerificarRol
{
public function handle(Request $request, Closure $next, $rol)
{
if ($request->user()->rol !== $rol) {
return response()->json(['mensaje' => 'No autorizado'], 403);
}
return $next($request);
}
}

Registrar el middleware en app/Http/Kernel.php dentro de $routeMiddleware:

'checkRole' => \App\Http\Middleware\VerificarRol::class,

Buenas prácticas y convenciones

  • Mantener el middleware enfocado en una sola responsabilidad.
  • Reutilizar middleware para lógica común entre varias rutas o controladores.
  • Evitar lógica de negocio compleja dentro del middleware; delegar a servicios.
  • Nombrar middleware de manera descriptiva según su función (auth, checkRole, logRequests).
  • Aplicar middleware global solo para tareas transversales necesarias y middleware por ruta para casos específicos.