laravel中间件-----------middleware

本文深入探讨了PHP中中间件的概念及其在处理HTTP请求过程中的作用,包括如何创建、注册和使用中间件,以及中间件的生命周期、顺序与可终止特性。通过实例展示了中间件在实际开发中的应用,旨在帮助开发者更高效地管理HTTP请求流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

middleware中间件

是访问到达服务器后在被对应的路由处理之前所经过的一层过滤层,故称中间件。

中间件是存放在app\http\middleware中,需要定一个 handle 处理方法,在handle中当处理完后,可以进行重定向,也可以使用 $next() 闭包函数执行之前的业务逻辑操作

第一步 使用artisan生成中间件

php artisan make:middleware testMiddleware

生成app\http\middleware\testMiddleware.php中间件

<?php

namespace App\Http\Middleware;

use Closure;

class testMiddleware
{
  中间件默认包含两个参数包含请求信息的$request和闭包函数$next
  $next可以继续执行之前的逻辑操作
  $request包含请求的信息
public function handle($request, Closure $next) { // 处理请求      //执行业务操作 return $next($request); } }

中间件可以加入其他参数

<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
    public function handle($request, Closure $next, $parameter)
    {
    当age大于18时将参数写入文本
if($request -> input('age') > 18) {   file_put_contents('testMiddlewareHandle.txt', $parameter);   }   return $next($request);   } }

其他中间件参数需要使用 : 来分割  多个参数应当用逗号隔开

Route::get('testMiddleware/{id}', ['middleware' => 'TestMiddleware:this is MiddlewareValue', 
function($id){ file_put_contents('testRoute.txt', $id); }]); 当访问testMiddle时会经过中间件TestMiddlewarephp中的handle函数处理,函数中的$parameter被赋值
'this is MiddlewareValue'

除了middleware属性指定中间件,也可使用middleware链式指定中间件

Route::get('/', ['middleware' => ['first', 'second'], function () {
    //
}]);
链式方法
Route::get('/', function () { // }])->middleware(['first', 'second']);

当访问http://localhost/testMiddleware/Route?age=19,public目录下会生成两个文件分别为testRoute.txt和testMiddlewareHandle.txt

第二步 注册中间件

设计好中间件后需要注册中间件,可以在 app\http\kernel.php 中注册全局的中间件$middleware

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
     ];

也可以注册局部路由中间件

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'test' => \App\Http\Middleware\TestMiddleware::class,
];

 

中间件处理顺序及可终止中间件

对于一个请求,需要中间件进行其他的操作对其处理,可以在操作之前或者之后进行处理

可以在$next()之前或者之后进行处理业务逻辑也可以 redirect() -> route('route')进行重定向
public
function handle($request, Closure $next) { if (condition) { // 执行动作 } $response = $next($request); 请求处理 if (condition) { // 执行动作 } return $response; }

可终止中间件

可以终止中间件是在相应已经结束之后进行的操作,加上一个 terminate 方法,

terminate方法含有两个参数:$request $response,  当使用可终止中间件需要将其注册进$middleware中

    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\TestMiddleware::class,
    ];

 

<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
    public function handle($request, Closure $next)
    {
             ....
      return $next($request);
  }

    public function terminate($request, $response)
    {
        file_put_contents("resuest.txt", $request);
        file_put_contents("response.txt", $response);
    }

}
对于任何的请求都会执行terminat方法,也不要指定路由的中间层为 全局中间层 不然会报错 class not exist

转载于:https://www.cnblogs.com/yangxunwu1992/p/5399968.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值