【问题标题】:Laravel 4.2 routing filters auth/guest error for root URILaravel 4.2 路由过滤器根 URI 的 auth/guest 错误
【发布时间】:2015-01-21 17:43:49
【问题描述】:

我正在尝试根据用户身份验证将单个 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 进行测试。我不想花时间挖掘代码库来找出问题所在。在我看来,对于框架本身来说,这似乎是一个糟糕的设计决策,但如果是这种情况,它会在这里解释问题。

我需要一个健全的检查,拜托。

【问题讨论】:

    标签: php laravel-4 laravel-routing


    【解决方案1】:

    应该是这个

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

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

    【讨论】:

    • 是的,我已经知道这一点,但试图避免 Routes 文件中的逻辑。当然这个想法是根 URI 有多个状态,取决于用户身份验证,因此有多个动作。我进一步将其抽象为多个控制器,一个用于注销(登录页面和接收区域),一个用于登录(个性化内容)。我会选择你的答案,因为没有其他人回复,谢谢:)
    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 2018-10-27
    • 2018-11-25
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2014-07-17
    相关资源
    最近更新 更多