Laravel 4.2路由过滤器根URI的auth / guest错误

时间:2014-11-24 03:52:37

标签: php laravel-4 laravel-routing

我正在尝试根据用户身份验证将单个URI路由到多个控制器。基本上,如果用户未登录并且他们访问根URI,则显示通用登录页面,否则,如果他们已登录并访问根URI,则显示其个性化内容。

我正在使用标准的开箱即用过滤器(auth / guest)和其他一些路由(此处未显示),这些路由已设置为快速验证/解除验证以进行测试。

这个想法看起来很简单,在我看来它应该可行,但是Laravel没有正确处理这个问题:

Route::group(array('before' => 'auth'), function() {
    Route::get('/', function() { echo 'logged in'; });
});

Route::group(array('before' => 'guest'), function() {
    Route::get('/', function() { echo 'logged out'; });
});

无论我有什么顺序,Laravel在用户通过身份验证时都不会确认Auth过滤器。第一个路径被跳过,Guest过滤器首先运行,或者单独运行(可能更准确)。

我是否错误地更改了其中一个过滤器中的内容?为什么会这样?这不应该没有顺利吗?

似乎Laravel无法处理多个操作的分配以测试单个URI。我并不特别想花时间挖掘代码库来找出问题所在。在我看来,这对于框架本身来说是一个糟糕的设计决策,不过如果是这样的话,它会解释这里的问题。

我需要进行健全检查。

1 个答案:

答案 0 :(得分:0)

应该是这个

Route::group(array('before' => 'guest|auth'), function() {
    Route::get('/', function() { 
        if(Auth::check()) {
            return "logged in";
        }

        return 'logged out';
    });
});

一个URI的多个控制器操作有什么意义?我很困惑。 URI仅由一个Controller操作提供。否则,它会 DRY ,IMO。