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

Laravel 9如何重写route()函数以支持多语言路由参数传递?

Laravel 9 自定义路由生成函数支持 Locale 参数

实现步骤

1. 创建自定义 UrlGenerator 类

在项目的app/Routing目录下新建UrlGenerator.php(目录不存在则手动创建),继承框架原生的UrlGenerator并重写route方法:

<?php

namespace App\Routing;

use Illuminate\Routing\UrlGenerator as BaseUrlGenerator;

class UrlGenerator extends BaseUrlGenerator
{
    public function route($name, $parameters = [], $absolute = true, $locale = null)
    {
        // 未指定locale时,使用当前应用的本地化语言
        $locale = $locale ?? app()->getLocale();
        
        // 拼接带locale前缀的路由名称
        $localizedRouteName = "{$locale}.{$name}";
        
        // 调用父类方法生成最终URL
        return parent::route($localizedRouteName, $parameters, $absolute);
    }
}

2. 替换框架默认的 UrlGenerator 服务

打开app/Providers/AppServiceProvider.php,在register方法中绑定自定义类,替换原生实现:

public function register()
{
    $this->app->bind(\Illuminate\Routing\UrlGenerator::class, \App\Routing\UrlGenerator::class);
}

3. 使用方式

现在可以按需求灵活调用route函数:

  • 自动使用当前locale:route('home')
  • 指定特定locale生成链接:route('home', [], true, 'uk')
  • 携带路由参数的调用:route('user.detail', ['id' => 123], true, 'en')

注意事项

  • 确保所有路由名称严格遵循{locale}.{name}的命名规则(如ru.home、uk.product),否则会触发路由不存在的异常。
  • 如果需要兼容不带locale前缀的特殊路由,可以在重写的route方法中添加判断逻辑,比如检测路由名称是否已包含.前缀,再决定是否拼接locale。

内容的提问来源于stack exchange,提问作者Денис Линник

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 08:18:26