Laravel 4:无法为命名路由“login”生成URL,因为此路由不存在

时间:2013-03-01 17:19:55

标签: laravel laravel-4

我正在Laravel 4项目中创建一个授权系统。我正在尝试使用auth“before”过滤器。

在我的routes.php文件中,我有:

Route::get('viewer', array('before' => 'auth', function() {
    return View::make('lead_viewer');
}));

Route::get('login', 'LoginController');

前置过滤器在filters.php文件中调用此行:

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

我可以手动导航到我的登录路线。但是auth系统并没有让这种情况发生。我已经运行了composer dump-autoload几次,所以这不是问题所在。我在做什么,因为如果我手动操作,我实际上可以加载登录页面?

3 个答案:

答案 0 :(得分:6)

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

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

Laravel中一种有趣但不是非常直观的方法。但是泰勒必须有这样的理由,我没有看到。

答案 1 :(得分:2)

要做你在初步方法中尝试做的事情,你可能刚刚做了:

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

它会工作得很好。

如果您想使用命名路线,那么您可以在回答自己的问题时执行所发布的操作。基本上......不止一种方法给猫皮肤。

希望有所帮助

答案 2 :(得分:1)

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

Laravel 正在寻找guest方法的命名路由,它期待路径

您的示例有效,因为命名路由和路径相同,即" login"。尝试将您的网址更改为“登录”之外的其他网址。并观察它失败。

如果你想使用一个命名路线,你应该使用路径助手方法......

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

希望能有所帮助。