2014-11-24 50 views
1

我试图根据用户认证将单个URI路由到多个控制器。实质上,如果用户未登录并且他们访问根URI,则显示通用登录页面,否则,如果他们已登录,并访问根URI,则显示其个性化内容。Laravel 4.2路由过滤器根URI的路由过滤器认证/访客错误

我使用标准的开箱即用过滤器(auth/guest)和其他一些路由(这里没有显示)已经设置为快速auth/de-auth进行测试。

的想法似乎直截了当不够,在我看来,像它应该工作,但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不会用户通过身份验证时确认身份验证过滤器。第一条路线被跳过,Guest过滤器首先运行,或者单独运行(可能更准确)。

我错误地改变了其中一个过滤器的内容吗?这是为什么发生?难道这不是一帆风顺吗?

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

我需要一个完整性检查。

回答

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。

+0

是的,我已经知道这一点,但试图避免在路径文件中的逻辑。当然,这个想法是,根URI具有多个状态,这取决于用户身份验证,因此有多个操作。我进一步将它抽象为多个控制器,一个用于注销(登录页面和接收区域),另一个用于登录(个性化内容)。我会选择你的答案,因为没有人回复,谢谢:) – ineedhelp 2014-11-30 11:33:18