0

0

Lithe 的中间件:它是如何工作的以及如何创建自己的中间件

花韻仙語

花韻仙語

发布时间:2024-10-25 09:47:55

|

1053人浏览过

|

来源于dev.to

转载

middleware no lithe: como funciona e como criar o seu próprio

中间件提供了一种方便的机制来检查和过滤进入应用程序的 http 请求。例如,lithe 包含用于检查应用程序用户是否经过身份验证的中间件。如果用户未经过身份验证,中间件会将用户重定向到应用程序的登录屏幕。但是,如果用户经过身份验证,中间件将允许请求在应用程序内继续进行。


中间件在 lithe 中的工作原理

在 lithe 中,中间件是可以访问应用程序请求响应循环中的请求对象 ($req)、响应对象 ($res) 和 $next 函数的函数。 $next 函数是 lithe 路由器中的一个函数,调用时会执行当前中间件旁边的中间件。

中间件函数提供了一种方便的机制来检查、过滤和处理进入应用程序的 http 请求。

中间件函数可以执行以下任务:

  • 运行任何代码。
  • 更改请求和响应对象。
  • 结束请求-响应周期。
  • 调用堆栈中的下一个中间件。

如果当前中间件函数没有结束请求-响应周期,则必须调用 $next() 将控制权传递给下一个中间件函数。否则,请求将被等待处理。


中间件功能的元素

以下代码显示了中间件函数调用的元素:

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

地点:
- $req:中间件函数的 http 请求参数,按照惯例称为“$req”。
- $res:中间件函数的 http 响应参数,按照惯例称为“$res”。
- $next:中间件函数的回调参数,按照惯例称为“$next”。


定义中间件

让我们从一个名为 mylogger 的简单中间件示例开始。每次请求通过该中间件时,该中间件都会打印 logged 消息。中间件被定义为分配给名为 mylogger 的变量的函数:

$mylogger = function ($req, $res, $next) {
  echo 'logged';
  $next();
};

注意上面对 $next() 的调用。调用此函数会调用应用程序中的下一个中间件函数。 $next() 函数不是 php 或 lithe 的一部分,但它是传递给中间件函数的第三个参数。 $next() 函数可以有任何名称,但按照惯例,它始终称为“next”。为了避免混淆,请始终使用此约定。

最好将中间件视为 http 请求在到达应用程序之前必须经过的一系列“层”。每一层都可以检查请求,甚至完全拒绝它。


加载中间件

要加载中间件函数,您可以调用 litheapp 类的 use() 方法,并指定所需的中间件函数。例如,以下代码在执行到根路径(/)的路由之前加载 mylogger 中间件函数:

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

每当应用程序收到请求时,它都会打印消息“logged”。

中间件加载顺序很重要:先加载的中间件函数也会先执行。

mylogger 中间件函数只是打印一条消息,然后通过调用 $next() 函数将请求传递给堆栈上的下一个中间件函数。


使用中间件

lithe 应用程序可以使用以下类型的中间件:

通吃客零食网整站 for Shopex
通吃客零食网整站 for Shopex

第一步】:将安装包中所有的文件夹和文件用ftp工具以二进制方式上传至服务器空间;(如果您不知如何设置ftp工具的二进制方式,可以查看:(http://www.shopex.cn/support/qa/setup.help.717.html)【第二步】:在浏览器中输入 http://您的商店域名/install 进行安装界面进行安装即可。【第二步】:登录后台,工具箱里恢复数据管理后台是url/sho

下载
  • 应用级中间件
  • 路由器级中间件
  • 第三方中间件

应用层中间件

使用 use() 和 method() 方法将应用程序级中间件绑定到应用程序对象的实例,其中 method 是中间件函数处理的请求的 http 方法(例如 get、put 或 post)小写。

此示例显示了一个没有汇编路径的中间件函数。每次应用程序收到请求时都会执行该函数。

$app->use(function ($req, $res, $next) {
    echo 'hello world!';
    $next();
});

下面的示例显示了一个处理路径 /user/:id 中的 get 请求的中间件。

$app->get('/user/:id', function ($req, $res, $next) {
    // se o id do usuário for '0', passa para o próximo middleware
    if ($req->param('id') === '0') {
        return $next();
    } 

    // caso contrário, envia uma resposta específica
    $res->send('id não é 0');
}, function ($req, $res) {
    // envia uma resposta quando o id for '0'
    $res->send('regular');
});

路由器级中间件

路由器级中间件的工作方式与应用程序级中间件相同,只是它绑定到 lithehttprouter 的实例。

$router = new \lithe\http\router;

使用 use 和 method 函数加载路由器级中间件。

以下示例代码展示了使用路由器级中间件的中间件系统:

$router = new \lithe\http\router;

// middleware de nível de roteador para todas as rotas do roteador
$router->use(function ($req, $res, $next) {
    echo 'time: ', date('h:i:s'), '
'; $next(); }); $router->get('/user/:id', function ($req, $res, $next) { // verifica se o id do usuário é '0'; se for, redireciona para / if ($req->param('id') === '0') { $res->redirect('/'); } // caso contrário, passa o controle para o próximo middleware na pilha $next() }, function ($req, $res, $next) { echo $req->param('id'); $res->render('special'); }); // monta o roteador na aplicação $app->use('/api', $router);

第三方中间件

使用第三方中间件为 lithe 应用程序添加功能。

安装所需功能所需的 php 模块,然后在应用程序级别或路由器级别将其加载到您的应用程序中。

以下示例说明了加载会话中间件,即 lithemiddlewaresessionsession 函数。

use function lithe\middleware\session\session;

$app = new \lithe\app;

$app->use(session([
    'secure' => true
]));

lithe 常用的第三方中间件功能的部分列表,请参阅:第三方中间件。

可配置的中间件

如果您需要可配置的中间件,请创建一个接受选项数组或其他参数的函数,然后根据输入参数返回中间件实现。

现在可以使用中间件了,如下所示。

$app->use(my_middleware(['option1' => '1', 'option2' => '2']));

 

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是中间件
什么是中间件

中间件是一种软件组件,充当不兼容组件之间的桥梁,提供额外服务,例如集成异构系统、提供常用服务、提高应用程序性能,以及简化应用程序开发。想了解更多中间件的相关内容,可以阅读本专题下面的文章。

178

2024.05.11

Golang 中间件开发与微服务架构
Golang 中间件开发与微服务架构

本专题系统讲解 Golang 在微服务架构中的中间件开发,包括日志处理、限流与熔断、认证与授权、服务监控、API 网关设计等常见中间件功能的实现。通过实战项目,帮助开发者理解如何使用 Go 编写高效、可扩展的中间件组件,并在微服务环境中进行灵活部署与管理。

217

2025.12.18

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

398

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

398

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

434

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

420

2023.11.14

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号