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, $permi
ssion)
在路由中传参:
->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元?
高性能网站服务器部署指南:稳定运行与安全配置优化方案

