主网址有2个不同的控制器laravel 4

时间:2013-12-17 13:34:20

标签: php laravel laravel-4 laravel-routing

我试图在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
    }
}));

2 个答案:

答案 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');
    });

});

这允许您以一种很好的方式对所有内容进行分组并保持逻辑分离,这毕竟是路由过滤器的目的。