"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Middleware en Lithe: cómo funciona y cómo crear el tuyo propio

Middleware en Lithe: cómo funciona y cómo crear el tuyo propio

Publicado el 2024-11-08
Navegar:933

Middleware in Lithe: How It Works and How to Create Your Own

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.

Cómo funciona el middleware en Lithe

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:

  • Ejecuta cualquier código.
  • Modificar los objetos de solicitud y respuesta.
  • Finalizar el ciclo solicitud-respuesta.
  • Llame al siguiente middleware de la pila.

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.


Elementos de una función de middleware

El siguiente código demuestra los elementos de una función de middleware:

$app->use(function ($req, $res, $next) {
    $next();
});

Dónde:

  • $req: argumento de solicitud HTTP, convencionalmente llamado $req.
  • $res: argumento de respuesta HTTP, convencionalmente llamado $res.
  • $next: Argumento de devolución de llamada, convencionalmente llamado $next.

Definición de software intermedio

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.


Cargando software intermedio

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().


Usando software intermedio

Una aplicación Lithe puede utilizar los siguientes tipos de middleware:

  • Middleware a nivel de aplicación
  • Middleware a nivel de enrutador
  • Middleware de terceros

Middleware a nivel de aplicación

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');
});

Middleware a nivel de enrutador

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);

Middleware de terceros

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.


Middleware configurable

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.

Declaración de liberación Este artículo se reproduce en: https://dev.to/lithephp/middleware-in-lithe-how-it-works-and-how-to-create-your-own-3h67?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

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