我试图在laravel 4上建立一个路由系统,其中包含类似主url的示例: http://laravel.dev/并且可以在此路线上渲染2个不同控制器中的1个。
示例:
如果用户A被记录,我将显示带有此网址的主页 - > http://laravel.dev/
如果用户A未登录,我也会在此网址中显示登录页面 - > http://laravel.dev/
我尝试设置我的路线,但它显示了一个空白页面。我该如何解决?
Route::get('/', array('before' => 'detectLang',function(){
if (Auth::guest()) { // check if user is logged
Route::get('/', 'MainController@getView'); // function that show the main page
} else {
Route::get('/','UserController@getLogin'); // function that render the login page
}
}));
答案 0 :(得分:3)
这不是Laravel中路由的工作方式。只有当你点击那条路线时才会调用路线中的闭包,所以在这种情况下,Laravel将无法创建这两条路线并听取它们。
但你可以用一个小组来做你需要的事情:
Route::group(array('before' => 'detectLang'), function()
{
if (Auth::guest()) { // check if user is logged
Route::get('/', 'MainController@getView'); // function that show the main page
} else {
Route::get('/','UserController@getLogin'); // function that render the login page
}
});
答案 1 :(得分:1)
我建议从路由文件中删除逻辑,因为它只会使问题复杂化,而是将路由分组,如此
Route::group(array('before' => 'detectLang'), function() {
Route::group(array('before' => 'guest'), function() {
Route::get('/', 'MainController@getView');
});
Route::group(array('before' => 'auth'), function() {
Route::get('/', 'UserController@getLogin');
});
});
这允许您以一种很好的方式对所有内容进行分组并保持逻辑分离,这毕竟是路由过滤器的目的。