问题是我去的时候: domain.com - >它服务于主页(好的) domain.com/foo - >它提供子页面(仍然可以)
但当我从其中一个去: domain.com/en - >它会出错(不正常)
但点击刷新后确定。
所以再次当我在domain.com/en上第一次出现错误后刷新ok 类似于domain.com/en/contact刷新确定后第一次出错的子页面
我会指出错误说第一次尝试转到PublicPageController @ subpage 但是当我去domain.com/en它应该不需要去PublicPageController @ homepage
有什么想法吗? 谢谢大家。
答案 0 :(得分:2)
我在这里猜测你设置基于语言环境的路线的方式是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}/
,这样你就可以减少路由问题。