En Laravel, un middleware es una capa intermedia que filtra las solicitudes HTTP entrando y saliendo de su aplicación. Se puede utilizar para diversas tareas como:
Para crear un middleware en Laravel, utilizamos el comando artisan
:
php artisan make:middleware CheckAge
Este comando generará una nueva clase de middleware en app/Http/Middleware/CheckAge.php
.
Abre el archivo generado CheckAge.php
y define la lógica en el método handle
:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if ($request->input('age') <= 18) {
return redirect('home');
}
return $next($request);
}
}
En este ejemplo, el middleware verifica si el usuario tiene más de 18 años. Si no es así, redirige la solicitud a la página home
.
Para que Laravel reconozca el middleware, es necesario registrarlo. Esto se puede hacer de dos maneras:
Para aplicar el middleware a todas las solicitudes, agrégalo al arreglo $middleware
en app/Http/Kernel.php
:
protected $middleware = [
// Otros middleware
\App\Http\Middleware\CheckAge::class,
];
Para aplicar el middleware a rutas específicas o a un grupo de rutas, agrégalo al arreglo $routeMiddleware
en app/Http/Kernel.php
:
protected $routeMiddleware = [
// Otros middleware
'checkAge' => \App\Http\Middleware\CheckAge::class,
];
Finalmente, aplica el middleware a las rutas en routes/web.php
o routes/api.php
:
Route::get('profile', function () {
// Solo usuarios mayores de 18 años pueden acceder
})->middleware('checkAge');
Route::middleware(['checkAge'])->group(function () {
Route::get('profile', function () {
// Solo usuarios mayores de 18 años pueden acceder
});
Route::get('settings', function () {
// Solo usuarios mayores de 18 años pueden acceder
});
});
A continuación, implementaremos un middleware de autenticación sencillo para demostrar un caso de uso más común.
php artisan make:middleware Authenticate
Abre Authenticate.php
y agrega la lógica:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class Authenticate
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
if (!$request->user()) {
return redirect('login');
}
return $next($request);
}
}
Este middleware redirige a la página de inicio de sesión si el usuario no está autenticado.
Regístralo en app/Http/Kernel.php
:
protected $routeMiddleware = [
// Otros middleware
'auth' => \App\Http\Middleware\Authenticate::class,
];
Aplica el middleware a las rutas que requieran autenticación:
Route::middleware(['auth'])->group(function () {
Route::get('dashboard', function () {
// Solo usuarios autenticados pueden acceder
});
Route::get('account', function () {
// Solo usuarios autenticados pueden acceder
});
});
Implementar middleware en Laravel 11 es un proceso sencillo que puede añadir una capa significativa de funcionalidad y seguridad a tu aplicación. Desde la creación y definición de la lógica del middleware hasta su registro y aplicación a rutas, Laravel proporciona un flujo de trabajo claro y efectivo para gestionar solicitudes HTTP. Con esta guía, deberías estar en camino de implementar middleware personalizados para satisfacer las necesidades específicas de tu aplicación.
¡Empieza a implementar tu propio middleware en Laravel 11 hoy mismo y lleva tu aplicación al siguiente nivel!
Jorge García
Fullstack developer