Ошибка маршрута не определена даже после изменения маршрута по умолчанию в методе без проверки подлинности с использованием laravel 5.6 - PullRequest
0 голосов
/ 11 июня 2018

это класс обработчика, и я переопределил метод для гостя

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 голосов
/ 12 июня 2018

В вашем коде вы вызываете именованный маршрут, используя вспомогательную функцию route() в Laravel.В документах

$url = route('routeName');

Функция маршрута генерирует 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));
}

Лично, если только яЯ использую именованные маршруты в другом месте, и имеет смысл держать имена маршрутов в такой константе, как это, я думаю, что проще просто добавить строку 'admin', чтобы получить то, что вы хотите.

Я знаю большинствона этот вопрос ответил @parthu_panther в ответе выше, просто добавив мой ответ, поскольку мой комментарий решил вопрос

0 голосов
/ 11 июня 2018

Измените свой маршрут, как показано ниже: - Route::get('admin','Admin\AdminController@createAdminform')->name('admin');

Источник

Именованные маршруты

Именованные маршруты позволяют удобно генерировать URL-адреса или перенаправлениядля конкретных маршрутов.Вы можете указать имя для маршрута, связав метод имени с определением маршрута:

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

Вы также можете указать имена маршрутов для действий контроллера:

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

Для большего понимания я предлагаю вам ознакомиться с официальной документацией по маршрутизации laravel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...