如果今天不努力,明天也不努力,那么人生只是在重复而已。(心不定,难成事)

Laravel的三种中间件使用场景及使用方法

Laravel Sam 38℃

laravel的请求在进入逻辑处理之前会通过http中间件进行处理。

先谈一谈中间件的使用场景,比如路由转到一张页面,我们需要记录用户的cookie,或者检测用户的访问权限,这些操作如果全写在控制器里是不合适的,因为随着业务的扩充,控制器里的业务逻辑会越来越臃肿,难以维护,所以不同的操作,我们分别写在各自的中间件里。

建立中间件

首先,通过Artisan命令建立一个中间件

中间件的php文件都放在了目录\app\Http\Middleware下,大家应该注意到,中间件Middleware和控制器Controller文件夹都在Http文件夹下。

中间件可以实现啊很多功能,例如权限验证,访问记录,重定向等等。

具体干什么看自己想法。

中间件在请求阶段会调用自己的handle()方法
同时中间件也可以在响应阶段使用,这时会调用它的terminate()方法
所以,当需要在响应发出后使用中间件只需要重写terminate()方法即可

handle()方法

handle()方法有两个参数
$request —>请求信息,里面包含了输入,URL,上传文件等等信息。
$next —>闭包函数。我的理解是将接下来需要执行的逻辑装载到了其中。

返回值:
通过上文对参数的描述可以了解到:
当我们在中间件中return $next($request);时,相当与把请求传入接下来的逻辑中。
同时,中间件也可以返回重定向,不运行之前的逻辑。
例如,希望将页面重定向到’/welcome’的页面return redirect('welcome').
注意,这里是重定向到”/welcome”这个地址的route而不是”welcome”这个页面(view)。

terminate()方法

参数
$request —>请求信息,里面包含了输入,URL,上传文件等等信息。
$response –>响应消息,包含了逻辑处理完成后传出到的响应消息。

因为terminate()方法只是在响应后进行一些处理所以没有返回值。

注册中间件

中间件可以是针对route的也可以是针对所有http请求的,只需要设置到app/Http/Kernel.php 的数组属性里即可

Kernel类中有三个属性$middleware $middlewareGroup $routeMiddleware

$middleware:全局中间件,要对所有的请求要做一些处理的时候,就适合定义在该属性内。(比如统计请求次数这些)
$middlewareGroups:中间件组,比如我们项目有api请求和web的请求的时候,就要把两种类型的请求中间件分离开来,这时候就需要我们中间件组啦。
$routeMiddleware:路由中间件,有些个别的请求,我们需要执行特别的中间件时,就适合定义在这属性里面。

举例如下:

路由中间件

在注册完中间件后就要开始绑定中间件到route。
绑定route有两种方法。

第一种是通过数组分配

第二种是通过方法链来分配

同时,也可以在Controller中调用中间件,就是在Controller的构造方法中调用:

全局中间件

直接加入到 protected $middleware中即可,每一次请求,这里面的每个中间件都会执行。
特别适合用在身份认证类的功能上。

中间件组$middlewareGroups属性

这个属性称为中间件组,为什么说是中间件组呢?我们之前说了路由中间件,是不是感觉这样添加路由中间件很麻烦,比如我们执行10个中间件,是不是就要在定义路由时候添加10个呢?有了中间件组就不用这么麻烦了。我们来看下中间件组是怎么定义的

好了,上面的例子就是定义中间件组的格式,比如我们看 web这个键值,它对应为一个数组,该数组有多个中间件组成。当我们定义好后,该怎么使用呢?
我们在声明路由的时候,这样调用就可以了。

更多待涛哥实践总结分享…

转载请注明:PHP笔记 » Laravel的三种中间件使用场景及使用方法

喜欢 (0)