当前位置:

首页 > 编程开发 > Laravel怎么处理自定义中间件按路由分组应用_Laravel仅对admin前缀生效【操作】

Laravel怎么处理自定义中间件按路由分组应用_Laravel仅对admin前缀生效【操作】

Lara vel怎么处理自定义中间件按路由分组应用_Lara vel仅对admin前缀生效【操作】 中间件注册时别直接全局推到 $middleware 这里有个常见的“坑”:全局中间件(也就是 $middleware 数组里的那些)会对每一个请求生效,无一例外。这意味着,无论是API接口、静态资源,

Lara vel怎么处理自定义中间件按路由分组应用_Lara vel仅对admin前缀生效【操作】

Lara vel怎么处理自定义中间件按路由分组应用_Lara vel仅对admin前缀生效【操作】

中间件注册时别直接全局推到 $middleware

这里有个常见的“坑”:全局中间件(也就是 $middleware 数组里的那些)会对每一个请求生效,无一例外。这意味着,无论是API接口、静态资源,甚至是健康检查路由,都会被它拦截。如果你的目标仅仅是让中间件在 /admin 路径下工作,那么第一步,就是得离这个全局数组远一点。

很多开发者为了图省事,习惯在 app/Http/Kernel.php 里直接把自定义中间件塞进 $middleware。结果呢?登录页面打不开了,网站首页被拦截了,连 /storage/logo.png 这种图片资源都加载不了,后台还没开始做,前台先“瘫痪”了。

  • 正确的位置应该是 $middlewareGroups['web'],或者更推荐的做法,是为后台单独新建一个分组,比如就叫 'admin'
  • 如果这个中间件是后台专属的,强烈建议单独建组。这样做的好处是逻辑清晰,避免和前台业务产生不必要的耦合。
  • 记住,注册到分组只是第一步,之后在定义路由时,还必须显式地调用这个分组,它不会自动生效。

路由分组时用 middleware 键指定中间件名

光有路由分组前缀,中间件是不会自动触发的。换句话说,你只写一个 prefix('admin'),你的中间件依然在“睡大觉”。

标准的写法应该是这样的:

Route::middleware(['admin.auth'])->prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class, 'index']);
    Route::get('/users', [AdminController::class, 'list']);
});
  • 这里的 admin.auth 是你在 app/Http/Kernel.php$routeMiddleware 数组里注册的别名,可不是完整的类名。
  • 别名必须和数组里定义的键名完全一致,Lara vel 对大小写是敏感的。
  • 另外需要注意,如果中间件需要传递参数(比如权限标识),在路由闭包里直接写 admin.auth:manage_users 是行不通的——Lara vel 5.5+ 不支持这种写法。这时候,就得考虑改用闭包中间件,或者在中间件构造器里注入相关逻辑。

中间件类里用 $request->route() 判断当前路径是否匹配

有时候,仅靠路由分组还不够灵活。比如,你希望中间件在 /admin 下生效,但又需要放行 /admin/login 这个登录页面。这时候,就不能完全依赖分组配置了,必须在中间件内部做一些更精细的判断。

关键点在于:不要用 $request->url()$request->fullUrl() 来做简单的字符串匹配。这种方式很容易出问题,比如漏掉查询参数,或者无法正确处理路由模型绑定后的真实路径。

  • 优先使用 $request->route()?->getName() 获取路由名称,或者用 $request->route()?->uri() 获取定义的路由模式。
  • $request->route()?->uri() 返回的是像 admin/dashboard 这样的原始模式,不包含域名和查询字符串,非常适合用来做路径前缀的判断。
  • 一个简单的绕过逻辑示例:
if ($request->route()?->uri() === 'admin/login') {
    return $next($request);
}
  • 这里有个细节必须警惕:一定要使用空安全操作符 ?->。因为在 CLI 命令行执行,或者某些异常请求中,$request->route() 可能返回 null,不加判断直接调用方法会导致错误。

测试时别只刷浏览器,要验证 CLI 和 API 场景

很多人在本地开发时,用浏览器访问一下 /admin/dashboard,能正常跳转就以为万事大吉了。结果项目一上线,定时任务 php artisan schedule:run 执行不了,或者 /api/admin/stats 接口被意外拦截,问题才暴露出来。

  • CLI(命令行)请求默认不会经过 web 中间件组,它只走 $middleware 全局数组。如果你不小心把后台中间件注册在这里,所有 Artisan 命令都可能被卡住。
  • API 路由默认使用 api 中间件组,和 web 组是隔离的。除非你主动在 routes/api.php 文件里也添加 middleware('admin.auth'),否则后台中间件不会对 API 生效。
  • 在真实的生产环境中,Nginx 或 Apache 的 URL 重写规则可能会影响最终结果,导致 $request->route()?->uri() 和预期不符。稳妥起见,建议在日志里打印一下这个值,确认实际匹配的路由模式。

最后,还有一个最常被忽略的步骤:清理缓存Kernel.php,但如果忘了运行 php artisan route:clear,Lara vel 很可能还会按照旧的、缓存起来的路由配置来执行。这一点,务必记得检查。

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发
相关文章 更多
C++动态数组初始化怎么写?常用语句与代码示例
C++动态数组初始化怎么写?常用语句与代码示例

深入解析C++中动态数组的初始化机制,涵盖new操作符的不同用法、基本类型与类对象的初始化差异,以及为何在现代C++开发中应优先使用std::vector。

钉钉视频通话卡顿音画不同步怎么办
钉钉视频通话卡顿音画不同步怎么办

钉钉视频卡顿与音画不同步?这份优化指南请收好 正开着钉钉视频会议,画面却一卡一顿,或者声音和嘴型对不上——这场景是不是很熟悉?沟通效率瞬间大打折扣。别急,这类问题通常有迹可循,解决起来也并非难事。下面这套从易到难的排查思路,或许能帮你快速找回流畅的会议体验。 本文运行环境:MacBook Pro,m

小红书视频上传慢怎么办
小红书视频上传慢怎么办

上传缓慢或卡顿?别急着怪应用,问题可能出在网络、视频格式或设备缓存上。优先尝试这几步:切到5G或5GHz Wi-Fi;用剪辑工具把视频参数调为1080p、30fps、H.264编码的MP4;如果视频太长,不妨分割一下;最后,记得清一清小红书缓存。多半能解决。 在小红书上传视频时遇到转圈圈、进度条龟速

夸克浏览器登录异常怎么办
夸克浏览器登录异常怎么办

网络不稳、缓存堆积或是账号安全机制触发,都可能是夸克登录异常的“元凶”。别急,顺着网络、缓存和权限这几条线排查下来,绝大多数情况都能快速搞定。 当夸克浏览器突然“拒签”,登录按钮怎么点都没反应时,别先怪手速。这事儿多半出在几个最常见的环节上。咱们按顺序来,从外到内捋一遍,问题往往就迎刃而解了。 检查

192.168.1.1登录页面打不开
192.168.1.1登录页面打不开

无法访问路由器管理界面?六步排查法帮你搞定 当你兴冲冲地在浏览器里敲入“192.168.1.1”,却发现页面一片空白或持续转圈时,那种感觉确实相当恼人。其实,这通常是网络连接、地址错误、IP配置冲突、浏览器“小脾气”、路由器服务罢工或需要“一键重启”等几个核心原因导致的。别担心,只要按照下面排查的逻

12306二星三星四星五星会员区别
12306二星三星四星五星会员区别

12306铁路畅行会员:二至五星,你的权益差在哪? 注册了12306铁路畅行会员,但对不同星级的权益总感觉有点“雾里看花”?这直接关系到你候补车票的成功率、积分到底多“值钱”,以及遇到问题时能获得多快的帮助。下面这份梳理,就是帮你厘清从二星到五星核心差异的清晰图谱。 (本文信息基于iPhone 15

京东新店怎么补单最快发货?京东补单最新方式
京东新店怎么补单最快发货?京东补单最新方式

京东新店补单:五种高效路径与极速发货实操指南 开门见山,新店初期最怕什么?订单履约出问题。无论是漏发、错发,还是消费者反馈没收到货,都直接关系到店铺的起步评分和宝贵的初始信任。遇到这种情况,“补单”是必须的补救动作,但怎么补得又快又准,把对体验的影响降到最低,这里面有不少门道。 别慌,目前平台为商家

Fast路由器密码设置指南
Fast路由器密码设置指南

连接fast路由器的wi-fi信号后,打开浏览器访问管理界面,首先调整设备的ip地址,并输入宽带运营商提供的账号与密码;接着在无线加密设置中设定您自己的wi-fi密码,即可完成全部基础配置。 1、 连接到FAST默认无线网络 配置路由器第一步,得让它先“亮起来”。别慌,操作很简单。拿出你的手机,在快

edge浏览器无法同步数据怎么办
edge浏览器无法同步数据怎么办

Edge同步失败?五大根因分析与修复方案 明明登录了微软账户,但Edge浏览器就是不同步书签、密码或历史记录——这大概是不少用户都遇到过的头疼事。问题通常出在几个地方:网络连接不畅、同步服务短暂卡住,或者是本地配置文件出了点小差错。别担心,下面这几套修复方案都是独立可操作的,你可以从第一条开始,逐一

using namespace 使用中遇到的问题怎么解决
using namespace 使用中遇到的问题怎么解决

命名空间的基本概念与常见引入问题在C++等编程语言中,命名空间(namespace)是一种将代码标识符(如变量、函数、类名)封装在特定名称下的机制,其主要目的是避免命名冲突,尤其是在大型项目或使用多个第三方库时。使用“using namespace”指令可以将指定命名空间中的所有名称引入当前作用域,

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件
macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

Mac软件 更多
灵活计算器
灵活计算器
macOS/iOS/Android

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师
macOS

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

WINDOWS 更多
Windows 10
Windows 10
Windows

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式
Windows/macOS/Linux

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘
Windows/macOS/iOS/Android

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。