You need to enable JavaScript to run this app. 如何将旧路由写法转换为Laravel 8的Route::get兼容格式以开发多语言页面
优惠活动
大模型
产品
解决方案
定价
更多

如何将旧路由写法转换为Laravel 8的Route::get兼容格式以开发多语言页面

Laravel 8 多语言功能路由适配说明

版本核心路由变动

Laravel 8 对路由加载逻辑做了默认调整:旧版本路由中使用控制器路径@方法的字符串写法可正常运行,是因为路由服务提供器会自动给控制器路径补上App\Http\Controllers\的命名空间前缀;8版本开始这个自动补全逻辑默认关闭,直接复用旧版路由写法会触发「控制器类不存在」的报错。

Laravel 8 中 Route::get 的两种正确写法

  • 类常量引用写法(官方推荐,适合新项目)
    写法结构为路由路径传入「控制器类+对应方法」组成的数组,支持IDE自动补全、代码重构时的全局识别,是目前最稳妥的写法:
    // 路由文件顶部先引入需要绑定的控制器类
    use App\Http\Controllers\TestController;
    
    // 基础调用模板
    Route::get('路由访问路径', [TestController::class, '对应的控制器方法'])->name('路由别名');
    
  • 兼容旧版字符串写法(适合存量项目批量迁移)
    如果不想逐个修改存量路由的写法,可以手动在app/Providers/RouteServiceProvider.php中开启自动命名空间前缀逻辑,恢复旧版的路由解析规则:
    // 在 RouteServiceProvider 类中添加属性,开启自动前缀补全
    protected $namespace = 'App\\Http\\Controllers\\';
    

旧代码适配转换结果

按照官方推荐的写法,你提供的多语言场景路由适配Laravel 8的最终可运行代码如下:

  1. 先在routes/web.php文件顶部引入语言控制器:
    use App\Http\Controllers\LanguageController;
    
  2. 替换原有旧路由写法:
    Route::get('landingpage/home', [LanguageController::class, 'index']);
    Route::get('landingpage/change', [LanguageController::class, 'change'])->name('changeLang');
    

注意:这种路由写法和你后续要实现的多语言中间件、语言包加载、会话存储语言偏好、语言切换回跳等逻辑完全兼容,不会因为路由调整产生适配问题。


内容的提问来源于stack exchange,提问作者Vysco Zyza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 03:45:04