如何将旧路由写法转换为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的最终可运行代码如下:
- 先在
routes/web.php文件顶部引入语言控制器:use App\Http\Controllers\LanguageController; - 替换原有旧路由写法:
Route::get('landingpage/home', [LanguageController::class, 'index']); Route::get('landingpage/change', [LanguageController::class, 'change'])->name('changeLang');
注意:这种路由写法和你后续要实现的多语言中间件、语言包加载、会话存储语言偏好、语言切换回跳等逻辑完全兼容,不会因为路由调整产生适配问题。
内容的提问来源于stack exchange,提问作者Vysco Zyza
相关产品推荐
相关产品推荐

