Laravel 4:无法为命名路由生成 URL "login"因为此类路由不存在



我正在我的Laravel 4项目中创建一个授权系统。我正在尝试使用验证"before"过滤器。

在我的routes.php文件中,我有:
Route::get('viewer', array('before' => 'auth', function() {
    return View::make('lead_viewer');
}));
Route::get('login', 'LoginController');

before过滤器调用filters.php文件中的这一行:

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::route('login');
});

我可以手动导航到我的登录路由。但权威系统不会让这种情况发生。我已经运行了composer dump-autoload几次,所以这不是问题。既然我可以手动加载登录页面,我在做什么?

我明白了。Laravel正在寻找一个命名的路由:我必须这样做:

Route::get('login', array('as' => 'login', function() {
    return View::make('login');
}));

在Laravel中一个有趣的,不是很直观的方法。但是泰勒这么做一定有我不知道的原因。

要做你在最初的方法中尝试做的事情,你可以这样做:

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('/login');
});

,它会工作得很好。

如果你想使用命名路由,那么你就按照你自己的问题的答案来做。本质上……剥猫皮的方法不止一种。

希望有帮助

我知道你现在可能已经解决了这个问题,但是在试图解决类似问题时偶然发现你的帖子后,我想分享我的想法…

Laravel 不是为guest方法寻找命名路由,它期望路径

你的例子之所以有效是因为命名的路由和路径是相同的。"登录"。试着把你的URL改成其他的,而不是"login",看着它失败。

如果你想使用命名路由,你应该使用路由辅助方法,如下所示…

if (Auth::guest()) return Redirect::guest( route('login') )

希望对大家有所帮助。

最新更新