Laravel带locale前缀路由设置语言返回空白页如何高效解决
问题原因
你改写后的闭包路由仅声明了控制器调用数组,没有实际执行并返回控制器方法的结果,因此没有输出内容导致空白页。
快速修复单路由写法
如果仅需要给单个路由加语言设置逻辑,调整为主动调用控制器方法即可:
Route::get('{locale}/home', function ($locale) { App::setLocale(getLocale($locale)); return app()->call([MachineController::class, 'home']); });
最高效的批量实现方案
如果有多个路由都需要携带locale参数,推荐使用路由分组+中间件的方案,避免重复编写语言设置逻辑:
- 执行命令生成中间件
php artisan make:middleware SetLocale - 编辑中间件
app/Http/Middleware/SetLocale.php的handle方法:
public function handle(Request $request, Closure $next) { $locale = $request->route('locale'); App::setLocale(getLocale($locale)); return $next($request); }
- 在
app/Http/Kernel.php中注册中间件别名:
protected $middlewareAliases = [ // 其他已有中间件 'locale' => \App\Http\Middleware\SetLocale::class, ];
- 把所有需要带locale参数的路由放到统一分组中,不需要修改原有控制器逻辑:
Route::middleware('locale')->prefix('{locale}')->group(function () { Route::get('home', [MachineController::class, 'home']); // 新增同规则路由直接在此处添加即可,无需重复处理语言逻辑 Route::get('list', [MachineController::class, 'list']); });
内容的提问来源于stack exchange,提问作者henrikhannewijk
相关产品推荐
相关产品推荐

