即使在使用laravel 5.6的未经验证的方法中更改默认路由后,路由也未定义错误

时间:2018-06-11 09:29:34

标签: php laravel laravel-5

这是处理程序类,我已经覆盖了guest

的方法
protected function unauthenticated($request, AuthenticationException $exception){
        return $request->expectsJson()
                    ? response()->json(['message' => $exception->getMessage()], 401)
                    : redirect()->guest(route('admin'));
    }

我的路线文件包含我想要到达的路线

Route::get('admin','Admin\AdminController@createAdminform');
Route::post('admin','Admin\AdminController@adminLogin');

2 个答案:

答案 0 :(得分:1)

更改您的路线如下: - Route::get('admin','Admin\AdminController@createAdminform')->name('admin');

Source

命名路线

命名路由可以方便地生成特定路由的URL或重定向。您可以通过将名称方法链接到路径定义来指定路径的名称:

Route::get('user/profile', function () {
//
})->name('profile');

您还可以为控制器操作指定路径名称:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

为了更加了解,我建议您阅读laravel的官方路由文档。

答案 1 :(得分:0)

在您的代码中,您使用Laravel中的route()辅助函数调用命名路由。在文档中

$url = route('routeName');

route函数为给定的命名路由生成一个URL:

关键字有named routes

这解释了为什么Route::get('admin','Admin\AdminController@createAdminform');不等于redirect()->guest(route('admin'));

直到您使用命名路由功能为路由命名,Laravel将不知道您要使用的路由,因此route()函数将抛出一个未定义的异常。

所以这里有一些方法可以解决这个问题。

正确的方法是将覆盖函数添加到app/Exceptions/Handler文件中,如下所示

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest('/admin');
}

如果你真的想使用命名路由,你可以保留上述内容,并调整它以使用这些路由,但是,它应该保持一致,如果你在这里使用命名路由,在任何地方使用它们。

将路线更改为这样

Route::get('admin','Admin\AdminController@createAdminform')->name('admin');

然后改变我们刚创建的未经验证的函数

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest(route('admin));
}

就个人而言,除非我在其他地方使用命名路由,并且将路径名称保持为常量是有意义的,我认为更容易添加“管理员”#39;字符串得到你想要的。

我知道@parthu_panther在上面的回答中回答了大部分内容,只是在我的评论解决问题时添加了我的答案