监控系统实践第13天:5天上手Laravel8.5之中间件篇(2/5)
前言
很多语言的框架中都有中间件,只是名称、叫法、存在形式不同罢了。
中间件真的非常好用,用得好省时又省力。
昨天介绍了Laravel8.5的路由,今天来介绍一下它的中间件,重点内容会放在注册中间件上面。
Laravel基础功能:中间件(Middleware)
中间件是什么?
中间件会在路由被调用之前或之后执行,它的作用,有点点像过滤器、拦截器之类的吧。
你可以在里面埋入过滤参数的代码,同时也可以埋入并执行一些自己自定义的逻辑代码。
如何运用?
中间件在实际运用中,可以有什么作用呢?比如可以进行一些HTTP请求的参数过滤,检查用户是否登录、用户的输入是否非法等。
可以使用中间件的地方有很多,很多地方可以用到一个中间件,也可以用到多个不同的中间件。
在使用中间件之前,要确定一下是什么场景,什么情况下使用它,是否有必要使用到它。
实际运用
中间件相对路由更容易理解,更容易上手。
下面我们通过5个步骤,结合实例,来编写并使用一个真实可用的中间件。
1. 确定中间件场景
现在我用一个实际的例子,来介绍一下Laravel 中间件的写法与用法。
假设现在有一个场景如下:
- 现有的站点提供了很多API接口供外部调用;
- 每次访客都会传递字符串与数字给对应的接口;
- 有三个指定的参数:
id、uid、order_id,必须为数字,否则会对网站存在一定的安全与性能隐患。
2. 分析场景情况
从刚才提供的场景可以得知,不论有多少接口,有多少数据要传递,最终要防范的,是参数:id、uid、order_id对应的值。
3. 编写中间件
明确了要处理防范的内容,编写起来就很简单了。从上面得知,我们只需要处理三个参数:id、uid、order_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,可以看到里面定义了3个protected受保护的变量,分别为:$middleware、$middlewareGroups、$routeMiddleware,且都是数组:

/app/Http/Kernel.php是什么文件,起什么作用?
是存放需要调用的中间件信息的,需要调用哪些中间件,全部都要在这个文件里面注册登记。
文件里面的这3个受保护的变量都是些什么?
这3个受保护变量,分别有不同的含义:
$middleware为全局中间件,只要加入进来的中间件,不需要到别的地方做任何配置,每次请求都会被执行一次;$middlewareGroups为中间件组,哪个地方需要就在哪个地方用;$routeMiddleware为路由中间件,有点像中间件组,哪个路由需要,就在哪个路由上面用。
中间件组和路由中间件

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

被折叠的 条评论
为什么被折叠?



