监控系统实践第13天:5天上手Laravel8.5之中间件篇(2/5)

本文围绕Laravel框架的中间件展开,介绍了中间件类似过滤器、拦截器,可用于过滤参数、检查用户登录等。通过实际场景,详细阐述了编写中间件的步骤,包括创建、注册(全局、组、路由),还介绍了后置中间件、调用方法、排序、参数及Terminable中间件等内容。

前言

很多语言的框架中都有中间件,只是名称、叫法、存在形式不同罢了。

中间件真的非常好用,用得好省时又省力。

昨天介绍了Laravel8.5的路由,今天来介绍一下它的中间件,重点内容会放在注册中间件上面。


Laravel基础功能:中间件(Middleware)

中间件是什么?

中间件会在路由被调用之前之后执行,它的作用,有点点像过滤器、拦截器之类的吧。

你可以在里面埋入过滤参数的代码,同时也可以埋入并执行一些自己自定义的逻辑代码。


如何运用?

中间件在实际运用中,可以有什么作用呢?比如可以进行一些HTTP请求的参数过滤,检查用户是否登录、用户的输入是否非法等。

可以使用中间件的地方有很多,很多地方可以用到一个中间件,也可以用到多个不同的中间件

在使用中间件之前,要确定一下是什么场景,什么情况下使用它,是否有必要使用到它。


实际运用

中间件相对路由更容易理解,更容易上手。

下面我们通过5个步骤,结合实例,来编写并使用一个真实可用的中间件


1. 确定中间件场景

现在我用一个实际的例子,来介绍一下Laravel 中间件的写法与用法。

假设现在有一个场景如下:

  1. 现有的站点提供了很多API接口供外部调用;
  2. 每次访客都会传递字符串与数字给对应的接口;
  3. 有三个指定的参数:iduidorder_id,必须为数字,否则会对网站存在一定的安全与性能隐患。

2. 分析场景情况

从刚才提供的场景可以得知,不论有多少接口,有多少数据要传递,最终要防范的,是参数:iduidorder_id对应的值。

3. 编写中间件

明确了要处理防范的内容,编写起来就很简单了。从上面得知,我们只需要处理三个参数:iduidorder_id即可。

3.1 创建中间件

所有的中间件文件,默认放在文件夹/app/Http/Middleware 下,这里我也建议不要到处放,以免造成各个文件夹的职责混乱

中间件可以通过:命令手工的方式创建。

想要创建中间件,除了原始的手工方式外,还有一种方式就是通过命令来创建,官方文档是使用命令创建,这里推荐使用命令

下面开始创建需要过滤那三个参数的中间件,我命名为:FilterParams,到Laravel的根目录下执行:

php artisan make:middleware FilterParams

执行之后,会出现以中间件名称命令的PHP文件FilterParams.php
在这里插入图片描述
打开刚才创建的中间件:/app/Http/Middleware/FilterParams.php,简单的看一下代码:
在这里插入图片描述
上图中可以看到,有一个公共方法:handle(),这个方法可以说是中间件的核心方法了,如果启用了中间件,框架就会调用被启用中间件handle()方法。

如果要增加自己的业务逻辑,要在这个方法的return之前添加处理。

3.2 注册中间件(重点章节)

注册相当于是启用,启用后,中间件就开始生效了。

刚创建,不写业务逻辑就启用?

是的,还没开始写代码, 不启用,怎么调试?


现在我们来启用刚才创建的中间件FilterParams

直接打开/app/Http/Kernel.php,可以看到里面定义了3protected受保护的变量,分别为:$middleware$middlewareGroups$routeMiddleware,且都是数组:
在这里插入图片描述
/app/Http/Kernel.php是什么文件,起什么作用?
是存放需要调用的中间件信息的,需要调用哪些中间件,全部都要在这个文件里面注册登记。

文件里面的这3个受保护的变量都是些什么?
3个受保护变量,分别有不同的含义:

  1. $middleware全局中间件,只要加入进来的中间件,不需要到别的地方做任何配置,每次请求都会被执行一次;
  2. $middlewareGroups中间件组,哪个地方需要就在哪个地方用;
  3. $routeMiddleware路由中间件,有点像中间件组,哪个路由需要,就在哪个路由上面用。

中间件组路由中间件

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

家铭didphp

你的鼓励是我最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值