Laravel 5.5 URL前缀式多语言路由配置问题求助
解决Laravel多语言路由路径不符的问题
看起来你需要调整路由的路径结构,同时确保Locale中间件正确处理默认语言的URL省略逻辑。我来帮你一步步修正:
1. 修正路由定义
你当前的hero.create路由路径是/hero/create,这和你想要的/create/hero顺序相反。直接调整分组内的路由路径即可,同时保持locale前缀的可选性:
// routes/web.php Route::group([ 'prefix' => '{locale?}', 'middleware' => \App\Http\Middleware\Locale::class ], function (\Illuminate\Routing\Router $router) { // 根路径:/(默认语言)、/fr、/nl Route::get('/', 'LandingController@index')->name('home'); // 英雄创建路径:/create/hero(默认)、/fr/create/hero、/nl/create/hero Route::get('/create/hero', 'HeroController@create')->name('hero.create'); });
2. 完善Locale中间件逻辑
你的Locale中间件需要处理两个关键逻辑:
- 当URL中没有locale参数时,自动设置默认语言
- 当使用默认语言时,生成URL时自动省略locale前缀(可选但推荐,避免重复的URL)
下面是中间件的示例实现:
// app/Http/Middleware/Locale.php <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\App; class Locale { // 定义支持的语言列表 protected $supportedLocales = ['en', 'fr', 'nl']; public function handle($request, Closure $next) { // 获取路由中的locale参数 $locale = $request->route('locale'); // 如果没有传入locale,使用配置的默认语言 if (!$locale) { $locale = config('app.locale'); } // 验证语言是否支持,不支持则回退到默认语言 if (!in_array($locale, $this->supportedLocales)) { $locale = config('app.fallback_locale'); } // 设置应用语言 App::setLocale($locale); // 可选:如果访问默认语言带locale的URL,重定向到不带locale的版本(比如/en/create/hero → /create/hero) if ($locale === config('app.locale') && $request->route('locale')) { $routeName = $request->route()->getName(); $routeParams = $request->route()->parameters(); unset($routeParams['locale']); return redirect()->route($routeName, $routeParams); } return $next($request); } }
3. 配置默认语言
确保在config/app.php中设置好默认语言和 fallback语言:
// config/app.php 'locale' => 'en', // 默认语言 'fallback_locale' => 'en',
4. 测试路由生成
现在你可以用Laravel的路由生成函数验证效果:
- 默认语言:
route('home')→/;route('hero.create')→/create/hero - 法语:
route('home', ['locale' => 'fr'])→/fr;route('hero.create', ['locale' => 'fr'])→/fr/create/hero - 荷兰语:
route('home', ['locale' => 'nl'])→/nl;route('hero.create', ['locale' => 'nl'])→/nl/create/hero
这样就能完全匹配你期望的URL规则了。
内容的提问来源于stack exchange,提问作者user936965
相关产品推荐
相关产品推荐

