You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:20:32