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

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 litheapp;$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 应用程序可以使用以下类型的中间件:

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

应用层中间件

使用 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 lithehttprouter;

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

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

$router = new lithehttprouter;// 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 lithemiddlewaresessionsession;$app = new litheapp;$app->use(session([    'secure' => true]));

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

可配置的中间件

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

<?phpfunction my_middleware ($options) {    return function ($req, $res, $next) use ($options) {        // implementação do middleware com base na array de opções        // chama o próximo middleware        $next();    };};

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

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

 

以上就是Lithe 的中间件:它是如何工作的以及如何创建自己的中间件的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1248683.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
【Laravel vx Docker】利用 Laravel Sail 高效搭建 Laravel 应用开发环境
上一篇 2025年12月9日 20:42:40
按照订单状态排序,如何置顶“待操作”并置底“已撤销”?
下一篇 2025年12月9日 20:42:58

相关推荐

  • 官方虫虫漫画链接获取-网站主站地址快速通道

    官方虫虫漫画链接获取-网站主站地址快速通道官方虫虫漫画链接获取-网站主站地址快速通道官方虫虫漫画链接获取-网站主站地址快速通道官方虫虫漫画链接获取-网站主站地址快速通道

    无法确认虫虫漫画网官方地址,其流传链接安全性无保障。建议选用腾讯动漫、哔哩哔哩漫画、快看漫画等正规平台获取正版资源,避免非官方渠道的隐私泄露与违规信息风险。 目前,无法确认“虫虫漫画网”的官方主站地址。网络上流传的所谓官网链接,例如 http://www.sxtyx.com/ 等,其真实性和安全性均…

    2026年10月6日 • 用户投稿
    600
  • 4月合资车型销量TOP50公布:特斯拉Model Y仅排第三

    4月合资车型销量TOP50公布:特斯拉Model Y仅排第三4月合资车型销量TOP50公布:特斯拉Model Y仅排第三4月合资车型销量TOP50公布:特斯拉Model Y仅排第三4月合资车型销量TOP50公布:特斯拉Model Y仅排第三

    依据刚刚公布的2025年4月份国内合资车型销售统计数据,排行榜前五十名里,日系与德系品牌依然保持强劲态势,不过整个合资汽车市场依旧承受着下行的压力。统计表明,当月合资品牌的总销量达到了44万辆,较去年同期减少了3%,相比上个月则下降了8%,市场份额正逐步被国产品牌所侵占。 ☞☞☞AI 智能聊天, 问…

    2026年10月6日 • 用户投稿
    400
  • Linux如何编译并安装ixgbe驱动

    第一步: 安装前提 安装之前,需要安装匹配的内核头文件和开发工具包。 $ sudo apt-get install linux-headers-$(uname -r) $ sudo apt-get install gcc make 第二步: 编译ixgbe驱动 从最新的ixgbe驱动中下载源码。 $…

    2026年10月6日
    000
  • Spring Cloud Gateway自定义过滤器的开发指南

    Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南

    自定义spring cloud gateway过滤器的核心方式是实现abstractgatewayfilterfactory。首先定义config类承载配置参数,接着覆写apply方法返回gatewayfilter实例并编写filter逻辑,访问serverwebexchange进行请求/响应处理,…

    2026年10月6日 • 用户投稿
    100
  • windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法

    windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法windows10无法识别sd卡怎么办_windows10SD卡识别故障解决方法

    Windows 10无法识别SD卡时,应先检查硬件连接、清洁触点并更换读卡器;确认设备无物理损坏后,通过设备管理器更新驱动;若系统识别但无盘符,需在磁盘管理中手动分配;使用chkdsk命令修复文件系统错误;最后通过数据恢复软件备份文件并格式化SD卡以恢复正常。 如果您将SD卡插入电脑后,Window…

    2026年10月6日 • 用户投稿
    000
  • win10键盘打字错乱出数字 win10键盘打字错乱问题的修复方法

    win10键盘打字错乱出数字 win10键盘打字错乱问题的修复方法win10键盘打字错乱出数字 win10键盘打字错乱问题的修复方法win10键盘打字错乱出数字 win10键盘打字错乱问题的修复方法win10键盘打字错乱出数字 win10键盘打字错乱问题的修复方法

    首先关闭键盘数字小键盘模式,通过Fn+Num Lock或功能键组合恢复字母输入;若无效则更新或重装键盘驱动,确保硬件正常通信;最后清理多余输入法并重置系统输入设置,排除软件冲突导致的按键错乱问题。 如果您在使用Windows 10系统时,发现键盘输入字母却显示为数字或符号,这通常是由键盘功能模式误触…

    2026年10月6日 • 用户投稿
    300
  • 共创共享 “MagicOS创享家”打造用户交流新范本

    共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本共创共享  “MagicOS创享家”打造用户交流新范本

    摘要: 唯有以“听劝”为驱动持续进化,才能真正锚定产品迭代的核心价值方向。 正文: 8月底,成都宽窄巷子再度成为焦点。 这里不仅有年轻人热衷的Live演出,亲子家庭可以共赏动画影片,游戏发烧友能线下组队开黑,AI科技也变得触手可及——边逛边玩、打卡互动、与热门IP零距离接触……一向以潮流文化聚集地著…

    2026年10月6日 • 用户投稿
    100
  • 如何在不联网的离线环境中使用composer

    如何在不联网的离线环境中使用composer如何在不联网的离线环境中使用composer如何在不联网的离线环境中使用composer如何在不联网的离线环境中使用composer

    在联网机器执行 composer install 下载依赖并缓存;2. 打包项目 vendor 目录、composer.lock 和缓存文件;3. 将包复制到离线机并配置本地缓存路径;4. 运行 composer install –no-scripts –no-plugins…

    2026年10月6日 • 用户投稿
    800
  • vivo手机黑屏怎么解决

    vivo手机黑屏怎么解决vivo手机黑屏怎么解决vivo手机黑屏怎么解决vivo手机黑屏怎么解决

    解决vivo手机黑屏问题的步骤如下:检查电源:确认手机已充电并尝试更换充电器或电源插座。强制重启:同时按住电源键和音量减小键 15 秒钟。进入安全模式:重启时按住音量减小键。清除缓存和数据:进入 recovery 模式并选择“清除缓存分区”。恢复出厂设置:进入 recovery 模式并选择“恢复出厂…

    2026年10月6日 • 用户投稿
    100
  • 热得实在难受?玩这几款PS5恐怖游戏消消暑!

    热得实在难受?玩这几款PS5恐怖游戏消消暑!热得实在难受?玩这几款PS5恐怖游戏消消暑!热得实在难受?玩这几款PS5恐怖游戏消消暑!热得实在难受?玩这几款PS5恐怖游戏消消暑!

    虽然已经立秋,但酷暑的余温依然未退。为了帮你驱散炎热,外媒gamerant近日精选了几款令人毛骨悚然的ps5恐怖游戏,本文整理汇总如下,让你在惊悚中感受一丝“凉意”! 《逃生:试炼》 推荐理由:设定残酷且极具压迫感,玩家必须通力合作解谜,同时躲避各种令人窒息的恐怖实体。当队友在怪物追击下慌不择路,那…

    2026年10月6日 • 用户投稿
    100
  • MySQL和TiDB的分布式事务处理能力对比

    mysql和tidb的分布式事务处理能力对比 随着互联网业务规模和复杂度的增加,分布式数据库成为企业选取的首选。MySQL作为一个成熟的关系型数据库,一直以来都具备着良好的性能和可靠性。而TiDB则是新兴的分布式数据库,由PingCAP公司研发,基于Google Spanner的设计理念,迅速崭露头…

    2026年10月6日
    300
  • linux下memcache如何安装配置

    基本原理: ① 客户端第一次访问应用程序时,会到数据库(rdbms)中取出数据,返回给客户端;同时也将取出的数据保存到memcached中。② 第二次访问时,因为数据已经缓存,就不用去数据库查询了,直接从memcached中取。 rdbms是文件型的数据库,最终还是以文件的形式保存在磁盘上;而mem…

    2026年10月6日
    200
  • win11怎么更改屏幕分辨率_win11显示器分辨率调整设置方法

    win11怎么更改屏幕分辨率_win11显示器分辨率调整设置方法win11怎么更改屏幕分辨率_win11显示器分辨率调整设置方法win11怎么更改屏幕分辨率_win11显示器分辨率调整设置方法win11怎么更改屏幕分辨率_win11显示器分辨率调整设置方法

    首先检查并设置推荐分辨率,通过系统设置→显示→分辨率选择(推荐)选项;其次可使用显卡控制面板创建自定义分辨率;最后更新显卡驱动以修复缺失的分辨率选项。 如果您发现Windows 11系统中的显示效果不理想,或者外接显示器无法匹配最佳画面,很可能是屏幕分辨率设置不当所致。调整分辨率可以显著改善文本和图…

    2026年10月6日 • 用户投稿
    200
  • 值得买科技自研AI购物管家“张大妈”正式版全面上线 新一代消费智能体引领消费应用新形态

    值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态值得买科技自研AI购物管家“张大妈”正式版全面上线  新一代消费智能体引领消费应用新形态

    9月4日,值得买科技自主研发的ai购物助手“张大妈”app正式发布全量版本,全面开启公测。作为新一代消费智能体,“张大妈”具备更强的感知、推理与执行能力,能够在纷繁复杂的消费场景中实现任务调度与自动化操作,显著提升用户的决策效率与购物体验,真正推动ai技术融入日常消费生活。此次正式版上线,不仅标志着…

    2026年10月6日 • 用户投稿
    100
  • Java中实现自然数字字符串排序的解决方案

    Java中实现自然数字字符串排序的解决方案Java中实现自然数字字符串排序的解决方案Java中实现自然数字字符串排序的解决方案Java中实现自然数字字符串排序的解决方案

    本文探讨了Java中字符串自然数字排序的问题,即如何实现“Test1.txt”在“Test11.txt”之前的人性化排序,而非默认的字典序。尽管Java标准库的String::compareTo和Collator::compare无法直接满足此需求,但通过引入第三方库alphanumeric-com…

    2026年10月6日 • 用户投稿
    100
  • Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架

    Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架Vid2World— 清华联合重庆大学推出视频模型转为世界模型的框架

    vid2world 是由清华大学携手重庆大学共同研发的一项创新框架,其核心在于能够将全序列、非因果的被动视频扩散模型(vdm)转化为自回归、交互式且动作条件化的世界模型。该模型依托视频扩散因果化以及因果动作引导两大关键技术,有效弥补了传统vdm在因果生成及动作条件化上的缺陷。在机器人操控和游戏仿真等…

    2026年10月6日 • 用户投稿
    100
  • 滴答清单任务动态功能使用教程_滴答清单任务动态与修改记录查看步骤

    滴答清单任务动态功能使用教程_滴答清单任务动态与修改记录查看步骤滴答清单任务动态功能使用教程_滴答清单任务动态与修改记录查看步骤滴答清单任务动态功能使用教程_滴答清单任务动态与修改记录查看步骤滴答清单任务动态功能使用教程_滴答清单任务动态与修改记录查看步骤

    答案:滴答清单任务动态功能可追踪任务变更与团队协作记录。在iPhone 15 Pro(iOS 18)运行环境下,进入任务详情页下滑开启任务动态后,可查看按时间倒序排列的操作记录;通过筛选图标可定位评论、截止日或负责人变更等特定事件;评论与回复以气泡图标标识,支持展开查看及回复,便于团队协作追溯。 如…

    2026年10月6日 • 用户投稿
    100
  • google浏览器下载链接 google浏览器入口链接

    google浏览器下载链接 google浏览器入口链接google浏览器下载链接 google浏览器入口链接google浏览器下载链接 google浏览器入口链接google浏览器下载链接 google浏览器入口链接

    Google浏览器下载入口链接是https://www.google.cn/chrome/,该页面提供Chrome浏览器的官方下载,同时介绍其页面加载快、支持扩展程序、内置翻译、跨设备同步及隐私安全等功能。 Google浏览器下载入口链接在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来Go…

    2026年10月6日 • 用户投稿
    100
  • Composer的self-update命令的–rollback选项如何使用?

    Composer的self-update命令的–rollback选项如何使用?Composer的self-update命令的–rollback选项如何使用?Composer的self-update命令的–rollback选项如何使用?Composer的self-update命令的–rollback选项如何使用?

    使用 composer self-update –rollback 可回退到上一版本,适用于更新后出现兼容性问题的场景,该命令仅能回退一次,回滚后需执行 composer –version 确认版本恢复。 当你使用 Composer 的 self-update 命令时,&#8…

    2026年10月6日 • 用户投稿
    200
  • vivo手机里的hd怎么关闭

    vivo手机里的hd怎么关闭vivo手机里的hd怎么关闭vivo手机里的hd怎么关闭vivo手机里的hd怎么关闭

    是的,可以通过以下步骤关闭 vivo 手机中的 HD 通话功能:1. 进入手机设置;2. 找到“拨号和通话”选项;3. 关闭“高清通话”或“VoLTE 通话”选项;4. 确认关闭。 如何关闭 vivo 手机中的 HD 通话功能? vivo 手机中的 HD 通话功能可以增强通话音质,但可能会消耗更多的…

    2026年10月6日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信