Esto significa que cuando el usuario (vista de Laravel) realiza una solicitud al servidor (controlador de Laravel), la solicitud pasará por el middleware. De esta forma, el middleware puede verificar si la solicitud está autenticada o no:
Laravel te permite defifinalizar y usar middleware adicional para realizar una variedad de tareas, excepto la autenticación.
Los middlewares de Laravel, como la autenticación y la protección CSRF, se encuentran en el directorio aplicación/Http/Middleware .
Por lo tanto, podemos decir que el middleware es un filtro de solicitud http, a través del cual es posible verificar condiciones y realizar acciones.
Para crear un nuevo middleware ejecutamos el siguiente comando:
php artisan make:middleware <name-of-middleware>
Creamos el middleware
y lo llamamos CheckAge
, artisan
nos responderá de la siguiente manera:
La ventana de arriba muestra que el middleware se ha creado correctamente con el nombre " Edad de verificación ".
Para ver si el middleware CheckAge está creado o no, vaya al proyecto en la carpeta app/Http/Middleware y verá el archivo recién creado.
El archivo recién creado tiene el siguiente código
<?php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
return $next($request);
}
}
Para usar middleware, necesitamos registrarlo.
Hay dos tipos de middleware en Laravel:
Middleware globale
Route Middleware
Il software intermedio global se ejecutará en cada solicitud HTTP de la aplicación, mientras que el Middleware de ruta se asignará a una ruta específica. El middleware se puede registrar en aplicación/Http/Kernel.php. Este archivo contiene dos propiedades. $middleware e $rutaMiddleware . La propiedad $middleware se utiliza para registrar middleware global y propiedad $rutaMiddleware se utiliza para registrar middleware específico de la ruta.
Para registrar el middleware global, enumere la clase al final de la propiedad $middleware.
protected $middleware = [
\App\Http\Middleware\TrustProxies::class,
\App\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
];
Para registrar el middleware específico de la ruta, agregue la clave y el valor a la propiedad $routeMiddleware.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
Nosotros creamos Edad de verificación en el ejemplo anterior. Ahora podemos registrar esto en la propiedad de ruta del middleware. El código para dicho registro se muestra a continuación.
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
];
También podemos pasar parámetros con Middleware.
Por ejemplo, si su aplicación tiene diferentes roles como usuario, administrador, superadministrador, etc. y desea autenticar la acción según el rol, puede hacerlo pasando los parámetros con el middleware.
El middleware que creamos contiene la siguiente función y podemos pasar argumentos personalizados después del argumento $siguiente .
public function handle($request, Closure $next)
{
return $next($request);
}
Ahora intentemos establecer el parámetro de rol en un nuevo middleware que vamos a crear desde cero, luego procedamos a crear Role Middleware ejecutando el siguiente comando
Modifique el método handle de la siguiente manera
<?php
namespace App\Http\Middleware;
use Closure;
class RoleMiddleware {
public function handle($request, Closure $next, $role) {
echo "Role: ".$role;
return $next($request);
}
}
agregamos el parámetro $role
, y dentro del método la línea echo
para escribir en la salida el nombre del rol.
Ahora registremos el middleware RoleMiddleware para una ruta específica
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
];
Ahora, para probar el middleware con el parámetro, necesitamos crear una solicitud y una respuesta. Para simular la respuesta vamos a crear el controlador al que llamaremos TestController
php artisan make:controller TestController --plain
el comando recién ejecutado creará un nuevo controlador dentro de la carpeta app/Http/TestController.php
y cambiar el método index
con la línea echo "<br>Test Controller.";
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class TestController extends Controller {
public function index() {
echo "<br>Test Controller.";
}
}
Después de configurar la respuesta, construimos la solicitud editando el archivo routes.php
agregando el route role
Route::get('role',[
'middleware' => 'Role:editor',
'uses' => 'TestController@index',
]);
en este punto podemos probar el ejemplo visitando la URL http://localhost:8000/role
y en el navegador veremos los dos echo
Role editor
Test Controller
Il terminable Middleware
realiza algunas tareas después de enviar la respuesta al navegador. Esto se puede lograr creando un middleware con el método terminar en el middleware. Il terminable Middleware
debe estar registrado en el middleware
global. El método terminate
recibirá dos argumentos $ solicitud e $respuesta.
El método Terminate
debe crearse como se muestra en el siguiente código.
php artisan make:middleware TerminateMiddleware
Una vez creado el middleware app/Http/Middleware/TerminateMiddleware.php
vamos a modificar el código de la siguiente manera
<?php
namespace App\Http\Middleware;
use Closure;
class TerminateMiddleware {
public function handle($request, Closure $next) {
echo "Executing statements of handle method of TerminateMiddleware.";
return $next($request);
}
public function terminate($request, $response) {
echo "<br>Executing statements of terminate method of TerminateMiddleware.";
}
}
en este caso tenemos un método handle
y un metodo terminate
con los dos parametros $request
e $response
.
Ahora vamos a registrar el Middleware
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'Age' => \App\Http\Middleware\CheckAge::class,
'Role' => \App\Http\Middleware\RoleMiddleware::class,
'terminate' => \App\Http\Middleware\TerminateMiddleware::class,
];
Ahora necesitamos crear el controlador para simular la respuesta.
php artisan make:controller XYZController --plain
modificando el contenido de la clase
class XYZController extends Controller {
public function index() {
echo "<br>XYZ Controller.";
}
}
Ahora tenemos que editar el archivo. routes/web.php
agregando las rutas necesarias para activar la solicitud
Route::get('terminate',[
'middleware' => 'terminate',
'uses' => 'XYZController@index',
]);
en este punto podemos probar el ejemplo visitando la URL http://localhost:8000/terminate
y en el navegador veremos las siguientes lineas
Executing statements of handle method of TerminateMiddleware
XYZController
Executing statements of terminate method of TerminateMiddleware
Ercole Palmeri
Usted también puede estar interesado en:
El principio de segregación de interfaces es uno de los cinco principios SÓLIDOS del diseño orientado a objetos. Una clase debería tener...
Microsoft Excel es la herramienta de referencia para el análisis de datos, porque ofrece muchas funciones para organizar conjuntos de datos,…
Walliance, SIM y plataforma líder en Europa en el campo del Crowdfunding Inmobiliario desde 2017, anuncia la finalización…
Filament es un marco de desarrollo "acelerado" de Laravel que proporciona varios componentes completos. Está diseñado para simplificar el proceso de...
«Debo volver para completar mi evolución: me proyectaré dentro del ordenador y me convertiré en energía pura. Una vez instalado…
Google DeepMind presenta una versión mejorada de su modelo de inteligencia artificial. El nuevo modelo mejorado proporciona no sólo...
Laravel, famoso por su sintaxis elegante y potentes funciones, también proporciona una base sólida para la arquitectura modular. Allá…
Cisco y Splunk están ayudando a los clientes a acelerar su viaje hacia el Centro de Operaciones de Seguridad (SOC) del futuro con...