带有 2 个不同控制器的主网址 拉拉维尔 4.


Main url with 2 different controller laravel 4

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

这不是 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
    }
});

我建议从路由文件中删除逻辑,因为它只会使事情复杂化,而是像这样对路由进行分组

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

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