我有以下路线:
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'
内处理。
所以,我不知道我做错了什么。有什么想法吗?