Laravel如何创建和注册中间件_Laravel中间件编写与应用流程

发布时间 - 2025-12-03 00:00:00    点击率:
中间件用于处理请求和响应,可通过Artisan命令创建,如php artisan make:middleware CheckAge,生成的类中handle方法需调用$next($request)以继续流程;中间件需在Kernel.php中注册,支持全局、路由和组三种方式,注册后可在路由或控制器中使用,如middleware('age'),并可传递参数如middleware('role:admin,create-post'),适用于身份验证、日志等场景,提升代码复用与维护性。

在 Laravel 中,中间件是处理请求和响应的过滤器,可用于身份验证、日志记录、权限检查等场景。创建和注册中间件是开发过程中常见的操作,下面详细介绍中间件的编写与应用流程。

创建中间件

Laravel 提供了 Artisan 命令快速生成中间件类:

php artisan make:middleware CheckAge

执行后会在 app/Http/Middleware 目录下生成一个名为 CheckAge.php 的文件。打开该文件可以看到基本结构:

class CheckAge
{
    public function handle($request, $next)
    {
        if ($request->age             return redirect('home');
        }
        return $next($request);
    }
}

handle 方法接收请求对象和下一个中间件闭包。逻辑处理完成后必须调用 $next($request) 继续请求流程,否则请求会被中断。

注册中间件

中间件需注册后才能使用,Laravel 支持三种注册方式:

  • 全局中间件:对所有请求生效。在 app/Http/Kernel.php$middleware 属性中添加:
  • '\\App\\Http\\Middleware\\CheckAge',
  • 路由中间件:绑定名称后在路由中使用。在 Kernel.php$routeMiddleware 数组中注册:
  • 'age' => \App\Http\Middleware\CheckAge::class,
  • 中间件组:将多个中间件组合使用。可在 $middlewareGroups 中定义如 web 或 api 组。

在路由中使用中间件

注册为路由中间件后,可在路由定义中使用:

Route::get('/profile', function () {
    //
})->middleware('age');

也可通过控制器构造函数绑定:

public function __construct()
{
    $this->middleware('age');
}

支持条件过滤,例如排除某些方法:

$this->middleware('age', ['except' => ['index']]);

中间件参数传递

中间件支持接收额外参数。修改 handle 方法签名:

public function handle($request, $next, $role, $permission)

在路由中传参:

->middleware('role:admin,create-post')

注意参数从第三个位置开始传入,前两个固定为请求和 next 闭包。

基本上就这些。掌握中间件的创建、注册与使用方式,能有效组织请求处理逻辑,提升代码可维护性。实际开发中建议将通用逻辑抽象成中间件复用。不复杂但容易忽略的是记得调用 $next($request)。


# laravel  # php  # app  # 路由  # 代码复用  # laravel中间件  # red  # 中间件  # if  # 构造函数  # class  # public  # 闭包  # function  # 对象  # this  # http  # 可在  # 三种  # 绑定  # 身份验证  # 复用  # 的是  # 多个  # 适用于  # 会在  # 也可 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 在线制作视频的网站有哪些,电脑如何制作视频短片?  如何在七牛云存储上搭建网站并设置自定义域名?  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel Docker环境搭建教程_Laravel Sail使用指南  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  如何快速建站并高效导出源代码?  如何制作一个表白网站视频,关于勇敢表白的小标题?  Bootstrap CSS布局之列表  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  高防服务器如何保障网站安全无虞?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  java获取注册ip实例  如何挑选优质建站一级代理提升网站排名?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  SQL查询语句优化的实用方法总结  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  js实现获取鼠标当前的位置  详解Android图表 MPAndroidChart折线图  如何在服务器上三步完成建站并提升流量?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel如何为API生成Swagger或OpenAPI文档  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel如何处理表单验证?(Requests代码示例)  如何在阿里云部署织梦网站?  EditPlus中的正则表达式实战(6)  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  如何在自有机房高效搭建专业网站?  如何选择PHP开源工具快速搭建网站?  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何配置Horizon来管理队列?(安装和使用)  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  php json中文编码为null的解决办法  详解jQuery停止动画——stop()方法的使用  Laravel怎么清理缓存_Laravel optimize clear命令详解  javascript中的try catch异常捕获机制用法分析  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Android实现代码画虚线边框背景效果  iOS发送验证码倒计时应用  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel如何优化应用性能?(缓存和优化命令)  如何在IIS7上新建站点并设置安全权限?  如何在云主机快速搭建网站站点?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  香港服务器租用每月最低只需15元?  高性能网站服务器部署指南:稳定运行与安全配置优化方案