Laravel路线很疯狂

时间:2014-02-28 10:10:04

标签: laravel laravel-routing

我有http://laravel.io/bin/jaPB

问题是我去的时候: domain.com - >它服务于主页(好的) domain.com/foo - >它提供子页面(仍然可以

但当我从其中一个去: domain.com/en - >它会出错(不正常

但点击刷新后确定。

所以再次当我在domain.com/en上第一次出现错误后刷新ok 类似于domain.com/en/contact刷新确定后第一次出错的子页面

我会指出错误说第一次尝试转到PublicPageController @ subpage 但是当我去domain.com/en它应该不需要去PublicPageController @ homepage

有什么想法吗? 谢谢大家。

1 个答案:

答案 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}/,这样你就可以减少路由问题。