如何在Laravel 5中正确过滤此路线代码?

时间:2016-07-27 14:39:43

标签: filter laravel-5 filtering

我有以下路线:

Route::get('/{lang?}', array('as'=>'URL',function ($lang=NULL) {

    //Retrieve the environment from URL string -> fist 2 characters.
    $env = substr(URL::route('URL'), 7, 2);
    //Store the $env inside the $_SESSION['env']
    Session::set('env', $env);

    if(is_null($lang)){
      //do some stuffs ....
    }

    return view('index');
}));

此代码的目标是检索URL并获取将成为环境的前2个字符($env)。

代码期望接收语言参数作为可选参数。如果用户键入URL=us.mysite.com/es,则代码将以US环境的西班牙语传递索引页。

如果没有任何内容作为语言发送,例如URL=us.mysite.com,则代码中会有一个数组,它会将默认语言告诉US环境。

到目前为止一切顺利,效果很好。

但现在我有一个问题。我想通过以下路线代码将用户发送到主页:

Route::get('/home', function () {
    return view('home');
});

问题是Route::get('/home'将转到Route::get('/{lang?}'并且我收到错误,因为代码不希望处理此单词。

在阅读Routes的文档后,我在第一个Route代码中创建了过滤器,这些过滤器应该只获取预期的语言字符串,如en,sp,fr。

所以这就是现在的代码:

Route::get('/{lang?}', array('as'=>'URL',function ($lang=NULL) {

    //Retrieve the environment from URL string -> fist 2 characters.
    $env = substr(URL::route('URL'), 7, 2);
    //Store the $env inside the $_SESSION['env']
    Session::set('env', $env);

    if(is_null($lang)){
      //do some stuffs ....
    }

    return view('index');
}))->where('lang', '[en|es|fr]');

这种方法不起作用。现在我遇到此错误NotFoundHttpException in RouteCollection.php line 161:,当我尝试URL=us.mysite.com/es时,当我尝试URL=us.mysite.com/home时,我收到错误No such file or directory

最终目标是,如果用户在没有lang参数的情况下键入URL=us.mysite.com,或在预期参数中键入URL=us.mysite.com/en or es or fr,则应在Route::get('/{lang?}'内处理请求。如果用户输入URL=us.mysite.com/home,请求应跳过Route::get('/{lang?}'路由,并应在Route::get('/home'内处理。

所以,我不知道我做错了什么。有什么想法吗?

0 个答案:

没有答案