Laravel:路线'登录'没有定义的?

时间:2018-02-03 17:24:31

标签: php laravel

当尝试访问auth所需的中间件页面时,问题是'Route [login] not defined',我的登录路线未被调用' login'而且我不希望它被称为登录。

这是我的路线......

Route::group(['middleware' => 'auth', 'namespace' => 'User'], function() {
    Route::get('/home', ['uses' => 'HomeController@getView', 'as' => 'frontend.user.home']);
});

Route::group(['middleware' => 'guest', 'namespace' => 'Guest'], function() {
    Route::get('/login', ['uses' => 'LoginController@getView', 'as' => 'frontend.guest.login']);
    Route::post('/login', ['uses' => 'LoginController@onPost', 'as' => 'frontend.guest.login']);
});

如何让它停止要求路线'登录'并开始要求我的自定义的' frontend.guest.login' ??

3 个答案:

答案 0 :(得分:1)

首先,您应该修改以下路线名称:

Route::get('/login', ['uses' => 'LoginController@getView', 'as' => 'frontend.guest.login']);
Route::post('/login', ['uses' => 'LoginController@onPost', 'as' => 'frontend.guest.login']);

请注意,您已将frontend.guest.login用于错误的两个(获取/发布)路由,而应使用唯一名称,例如:frontend.guest.get.login用于Route::get()和{{ 1}} frontend.guest.post.login

然后,在Route::post()类中,创建/覆盖以下方法:

App\Exceptions\Handler

另外,使用课程顶部的protected function unauthenticated($request, AuthenticationException $exception) { return $request->expectsJson() ? response()->json(['message' => 'Unauthenticated.'], 401) : redirect()->guest(route('frontend.guest.get.login')); } 语句在use Illuminate\Auth\AuthenticationException;中导入AuthenticationException课程。

此外,将App\Exceptions\Handler的每个用例更改为相应的路由名称,使用frontend.guest.login进行表单提交/操作,并frontend.guest.post.login显示表单或重定向。

答案 1 :(得分:0)

您必须编写下一个代码才能重定向到访客

public function __construct()
{
    $this->middleware('guest')->except('logout');
}

然后在主页面中编写下一个代码

public function __construct()
{
    $this->middleware('auth');
}

答案 2 :(得分:0)

这是因为Laravel的默认Authenticate中间件抛出AuthenticationException而Laravel的默认方式是处理此异常是为了这样做:

return $request->expectsJson()
            ? response()->json(['message' => $exception->getMessage()], 401)
            : redirect()->guest(route('login'));

您会在unauthenticated Illuminate\Foundation\Exceptions\Handler方法中找到此代码,您的默认App\Exceptions\Handler应该延伸。

只需在unauthenticated课程中提供自己的App\Exceptions\Handler方法,即可覆盖此行为。例如:

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{
    // The rest of your Handler class here...

    public function unauthenticated()
    {
        // Add your implementation here
    }
}