В вашем коде вы вызываете именованный маршрут, используя вспомогательную функцию 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 в ответе выше, просто добавив мой ответ, поскольку мой комментарий решил вопрос