我的猜测是查看您设置基于语言环境的路线的方式,Session::get('urilang) 在您第一次访问时未设置,因此出现错误,并且仅在您去过第一页。
现在,我还没有处理多语言网站,但据我所知,您的做法并不正确。而是将 lang 键视为 URI 参数,并使用过滤器来验证并为路由设置它。有点像下面的代码:
// Main and subpage - not default language
Route::group(array('prefix' => '{lang}', 'before' => 'detectLanguage'), function () {
Route::get('', 'PublicPage@homepage');
Route::get('{slug}', 'PublicPage@subpage');
});
// Main and subpage - default language
Route::group(array('before' => 'setDefaultLanguage'), function () {
Route::get('/', 'PublicPage@homepage');
Route::get('/{slug}', 'PublicPage@subpage');
});
Route::filter('detectLanguage', function($route, $request, $response, $value){
// hopefully we could do something here with our named route parameter "lang" - not really on sure the details though
// set default
$locale = 'hu';
$lang = '';
// The 'en' -> would come from db and if there is more i would of corse use in array
if (Request::segment(1) == 'en')
{
$lang = 'en';
$locale = 'en';
}
App::setLocale($locale);
Session::put('uriLang', $lang);
Session::put('locale', $locale);
});
Route::filter('setDefaultLanguage', function($route, $request, $response, $value){
App::setLocale('hu');
Session::put('uriLang', '');
Session::put('locale', 'hu');
});
我不知道您是否可以在 Route::group 前缀中使用段变量,但您当然应该尝试一下,因为它是最有用的。
也就是说,我不建议设置模仿特定语言路径但没有语言段的默认语言路径。如果我是你,我会设置一个特殊的根路由,将重定向到/{defaultlang}/,这样你就可以减少路由问题。