我正在尝试根据用户身份验证将单个URI路由到多个控制器。本质上,如果用户未登录并点击了根URI,则显示一个通用的登录页面,否则,如果用户登录并访问了根URI,则显示其个性化内容。
我使用的是标准的现成过滤器(身份验证/来宾)和其他一些路由(此处未显示),它们已设置为快速进行身份验证/取消身份验证以进行测试。
这个想法似乎很简单,在我看来它应该可行,但是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进行测试的多个操作的分配。我不想特别花时间在代码库中进行挖掘以找出问题所在。在我看来,对于框架本身来说,这是一个糟糕的设计决策,尽管如果是这样的话,它将在这里解释问题。
请给我一个健康检查。
应该是这个
Route::group(array('before' => 'guest|auth'), function() {
Route::get('/', function() {
if(Auth::check()) {
return "logged in";
}
return 'logged out';
});
});
一个URI的多个控制器动作有什么意义?我很困惑。URI仅由一个Controller
人的操作提供。否则,它将得到DRY,IMO。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句