-1

我试图在 laravel 4 上建立一个路由系统,具有类似的主 url 示例: http ://laravel.dev/并且可以在此路由上渲染 2 个不同控制器中的 1 个。

例子:

如果用户 A 已登录,我将使用此 url 显示主页 --> http://laravel.dev/

如果用户 A 未登录,我也会在此 url 中显示登录页面 --> 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
    }
}));
4

2 回答 2

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
    }
});
于 2013-12-17T13:46:59.450 回答
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');
    });

});

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

于 2013-12-17T19:18:14.703 回答