Laravel动态路由定义静态页后触发RouteNotFoundException的解决方法
Laravel 单路由定义多静态页面导航栏报错处理
我在Laravel Daily上看到可以在web.php中用单行代码定义contact、imprint、「关于我们」这类静态页面的路由,代码如下:
路由配置代码(web.php)
Route::get('/{page}', App\Http\Controllers\StaticPageController::class) ->name('page') ->where('page', 'about-us|imprint|contact');
这种写法十分简洁,但我在渲染导航栏时遇到了问题:我的Blade导航栏自带当前菜单项动态高亮逻辑,原本nav.blade.php的代码如下:
原导航栏代码(nav.blade.php)
<x-nav-link :href="route('about-us')" :active="request()->routeIs('about-us')"> {{ __('About us') }} </x-nav-link>
改用上述单行路由写法后,页面抛出以下错误:
Symfony\Component\Routing\Exception\RouteNotFoundException:Route [about-us] not defined. (View: /project01/resources/views/includes/nav.blade.php)
这个报错逻辑成立,因为我已经没有单独定义about-us路由了。我知道需要给路由做对应的数组映射,但不清楚具体实现方式,请问该如何解决?
解决方案
修改导航栏的路由调用和高亮判断逻辑即可,修正后代码如下:
<x-nav-link :href="route('page', ['page' => 'about-us'])" :active="request()->routeIs('page') && request()->route('page') === 'about-us'"> {{ __('About us') }} </x-nav-link>
- 路由调用逻辑:所有静态页的路由名统一为
page,传入对应的page参数即可生成对应页面的URL - 高亮判断逻辑:因为路由名统一为
page,需要同时匹配路由名和page参数的值,才能正确高亮当前访问的页面
内容的提问来源于stack exchange,提问作者Maik Lowrey
相关产品推荐
相关产品推荐

