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

Laravel Voyager添加{lang}前缀路由报错:缺少参数

解决Voyager后台路由缺少{lang}参数的问题

直接修改Voyager路由文件(不推荐,更新会覆盖)

在vendor/tcg/voyager/routes/voyager.php中,找到最外层的路由分组,为其添加{lang}前缀:

原代码:

Route::group(['as' => 'voyager.'], function () {

修改后:

Route::group(['as' => 'voyager.', 'prefix' => '{lang}'], function () {

此修改会让所有Voyager路由都带上{lang}前缀,例如后台仪表盘路由变为/{lang}/admin(假设Voyager配置中的prefix是admin)。

推荐方案:修改Voyager配置(无vendor文件编辑)

直接修改配置文件更安全,不会在Voyager更新时被覆盖:

  1. 打开config/voyager.php,找到prefix配置项:
    'prefix' => 'admin',
    
  2. 修改为包含{lang}的前缀:
    'prefix' => '{lang}/admin',
    

可选:让语言参数默认生效

如果希望访问/admin时自动使用系统默认语言(无需显式传入{lang}),可以将前缀改为可选参数:

'prefix' => '{lang?}/admin',

后续配置

  1. 限制语言参数范围:在app/Providers/RouteServiceProvider.php的boot方法中添加语言参数的正则约束,避免无效语言值:
    public function boot()
    {
        Route::pattern('lang', 'en|zh-CN|zh-TW'); // 替换为你支持的语言代码
        parent::boot();
    }
    
  2. 语言切换中间件:创建一个中间件,根据{lang}参数设置应用的本地化语言:
    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\App;
    
    class SetLocale
    {
        public function handle($request, Closure $next)
        {
            // 使用路由参数中的语言,若无则使用系统默认语言
            $lang = $request->route('lang') ?? config('app.locale');
            App::setLocale($lang);
            return $next($request);
        }
    }
    
    将此中间件注册到app/Http/Kernel.php的web中间件组中。
  3. 生成带语言参数的URL:在生成Voyager路由链接时,需传入lang参数(可选参数可省略,系统会自动使用默认值):
    // 显式传入语言
    route('voyager.dashboard', ['lang' => 'en']);
    // 使用当前应用语言
    route('voyager.dashboard', ['lang' => app()->getLocale()]);
    // 可选参数下可直接调用
    route('voyager.dashboard');
    

内容的提问来源于stack exchange,提问作者Eric SsSnake

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:04:03