You need to enable JavaScript to run this app. Laravel同控制器绑定两组资源路由route()跳转与active匹配异常问题
优惠活动
大模型
产品
解决方案
定价
更多

Laravel同控制器绑定两组资源路由route()跳转与active匹配异常问题

问题原因与修复方案

一、第一种写法遗漏的配置

你之前的写法存在两个核心问题:

  • Laravel 资源路由会默认根据URI自动生成路由名前缀,URI 为 user/posts 的资源路由默认生成的路由名格式为 user.posts.{操作名}(比如列表页是 user.posts.index,详情页是 user.posts.show),你之前仅用 ->name('show', 'user.posts') 单独覆盖了详情页的路由名,没有为整个资源路由统一配置名称规则,也不存在名为 posts 的全局路由。
  • 同一路由组内重复定义相同控制器的资源路由时,后面定义的管理员端路由会覆盖部分前置路由的默认命名,这才导致管理员场景下能偶然跳转到正确地址,普通用户场景下匹配不到对应路由。

正确的路由定义应该用names方法为整个资源路由指定统一名称前缀:

Route::group(['middleware' => 'auth'], function () {
    Route::resource('user/posts', PostController::class)->names('user.posts');
    Route::resource('admin/posts', PostController::class)->middleware('is_admin')->names('admin.posts');
});

修改后两个资源路由的所有操作都会生成符合预期的路由名:普通用户端列表路由为user.posts.index,管理员端列表路由为admin.posts.index。

二、导航激活状态修复

你之前routeIs('posts')的匹配规则不存在对应路由,自然无法激活。要匹配两端所有posts相关路由,直接用通配符匹配路由名前缀即可:

<x-jet-nav-link href="{{ route(auth()->user()->isAdmin() ? 'admin.posts.index' : 'user.posts.index') }}" :active="request()->routeIs(['admin.posts.*', 'user.posts.*'])">
 {{ __('Posts') }}
</x-jet-nav-link>

如果你只需要在列表页激活,也可以把匹配规则改成['admin.posts.index', 'user.posts.index']。


内容的提问来源于stack exchange,提问作者Jongha Lim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:21:03