如何为Laravel Voyager菜单构建器的link()方法传递{lang}参数
解决Voyager导航栏本地化传参问题
针对你遇到的问题,分两种常见场景给出解决方案:
场景1:Voyager菜单中填写的是路由名称
如果你的菜单链接存的是Laravel路由名称(比如shopIndex),之前的写法无效大概率是因为路由参数需要关联数组形式传递(对应路由定义中的命名参数)。修改代码如下:
@foreach ($items as $menu_item) <a href='{{ route($menu_item->link(), ['lang' => App::getLocale()]) }}' class="nav-link"> {{ $menu_item->title }} </a> @endforeach
解释:Laravel的route()函数对于命名路由参数,需要以['参数名' => 参数值]的形式传递,确保参数能正确匹配到路由定义中的{lang}占位符。
场景2:Voyager菜单中填写的是带占位符的URL
如果你的菜单链接直接存的是带{lang}占位符的URL(比如/{lang}/shop),直接替换占位符即可:
@foreach ($items as $menu_item) <a href='{{ str_replace('{lang}', App::getLocale(), $menu_item->link()) }}' class="nav-link"> {{ $menu_item->title }} </a> @endforeach
兼容多种链接类型的写法
如果菜单中同时存在路由名、带占位符的URL和普通外部链接,可以加判断兼容所有情况:
@foreach ($items as $menu_item) @php $href = $menu_item->link(); // 处理带{lang}占位符的URL if (str_contains($href, '{lang}')) { $href = str_replace('{lang}', App::getLocale(), $href); } // 处理路由名称 elseif (Route::has($href)) { $href = route($href, ['lang' => App::getLocale()]); } @endphp <a href='{{ $href }}' class="nav-link"> {{ $menu_item->title }} </a> @endforeach
内容的提问来源于stack exchange,提问作者Eric SsSnake
相关产品推荐
相关产品推荐

