El middleware proporciona un mecanismo conveniente para inspeccionar y filtrar las solicitudes HTTP que ingresan a su aplicación. Por ejemplo, Lithe incluye middleware que verifica si el usuario está autenticado. De lo contrario, el middleware redirigirá al usuario a la pantalla de inicio de sesión. Si el usuario está autenticado, el middleware permite que la solicitud continúe.
En Lithe, el middleware son funciones con acceso al objeto de solicitud ($req), al objeto de respuesta ($res) y a la función $next en el ciclo de solicitud-respuesta de la aplicación. La función $next, cuando se invoca, llama al siguiente middleware en la pila actual.
Las funciones de middleware proporcionan una manera conveniente de inspeccionar, filtrar y manipular solicitudes HTTP entrantes a su aplicación. Pueden:
Si el middleware actual no finaliza el ciclo de solicitud-respuesta, debe llamar a $next() para pasar el control al siguiente middleware. De lo contrario, la solicitud quedará pendiente.
El siguiente código demuestra los elementos de una función de middleware:
$app->use(function ($req, $res, $next) { $next(); });
Dónde:
Aquí hay un ejemplo sencillo de middleware llamado myLogger. Este middleware imprime el mensaje REGISTRADO cada vez que pasa una solicitud por él. Se define como una función asignada a una variable llamada myLogger:
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
Observe la llamada $next() arriba. Esta función llama al siguiente middleware de la aplicación. $next() no es una función PHP o Lithe incorporada, pero es el tercer argumento que se pasa a la función de middleware. Aunque $next() puede tener cualquier nombre, por convención siempre se llama "siguiente". Para evitar confusiones, respete esta convención.
Imagínese el middleware como una serie de "capas" por las que pasan las solicitudes HTTP antes de llegar a su aplicación. Cada capa puede examinar o rechazar la solicitud.
Para cargar middleware, llama al método use() de la clase \Lithe\App, especificando la función del middleware. Por ejemplo:
$app = new \Lithe\App; $myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); }; $app->use($myLogger); $app->get('/', function ($req, $res, $next) { $res->send('Hello World!'); });
Siempre que la aplicación reciba una solicitud, se imprimirá el mensaje "LOGGED". El orden de carga del middleware es importante: los que se cargan primero se ejecutan primero.
El middleware myLogger simplemente imprime un mensaje y luego pasa la solicitud al siguiente middleware usando $next().
Una aplicación Lithe puede utilizar los siguientes tipos de middleware:
Adjuntas middleware a nivel de aplicación a una instancia de la aplicación usando los métodos use() o METHOD(), donde METHOD se refiere al método HTTP (por ejemplo, GET, PUT, POST) en minúsculas.
Este ejemplo muestra middleware sin ruta. El middleware se ejecuta cada vez que se recibe una solicitud:
$app->use(function ($req, $res, $next) { echo 'Hello World!'; $next(); });
En el siguiente ejemplo, el middleware maneja una solicitud GET a la ruta /usuario/:id:
$app->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { return $next(); } $res->send('ID is not 0'); }, function ($req, $res) { $res->send('regular'); });
El middleware a nivel de enrutador funciona como middleware a nivel de aplicación, pero está adjunto a una instancia de \Lithe\Http\Router:
$router = new \Lithe\Http\Router;
Cargas middleware a nivel de enrutador usando las funciones use() y METHOD().
Aquí hay un ejemplo de middleware a nivel de enrutador:
$router = new \Lithe\Http\Router; $router->use(function ($req, $res, $next) { echo 'Time: ', Date('H:i:s'), '
'; $next(); }); $router->get('/user/:id', function ($req, $res, $next) { if ($req->param('id') === '0') { $res->redirect('/'); } $next(); }, function ($req, $res) { echo $req->param('id'); $res->render('special'); }); $app->use('/api', $router);
Puede utilizar middleware de terceros para agregar funcionalidad a sus aplicaciones Lithe. Instale el módulo PHP requerido y luego cárguelo a nivel de aplicación o enrutador.
Aquí hay un ejemplo de cómo cargar middleware de sesión con \Lithe\Middleware\Session\session:
use function Lithe\Middleware\Session\session; $app = new \Lithe\App; $app->use(session([ 'secure' => true ]));
Para obtener una lista del middleware de terceros que se usa comúnmente con Lithe, consulte el recurso Middleware de terceros.
Si necesita que su middleware sea configurable, puede crear una función que acepte una serie de opciones u otros parámetros y luego devuelva la implementación del middleware en función de esos parámetros. Vea el siguiente ejemplo:
Ahora puedes usar el middleware con configuraciones personalizadas:
$app->use(my_middleware(['option1' => '1', 'option2' => '2']));Para crear middleware que otros desarrolladores puedan instalar a través de Composer, existe un paquete llamado lithemod/flow. Proporciona interfaces y utilidades para manejar solicitudes y respuestas HTTP en Lithe, lo que facilita la creación de middlewares estandarizados y listos para usar en varias aplicaciones.
lithemod/flow ayuda a crear middlewares sólidos al proporcionar una interfaz unificada para solicitudes y respuestas, lo que hace que el desarrollo sea más eficiente y organizado. Esto simplifica la integración de su middleware en otros proyectos y garantiza que el código siga estándares consistentes.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3