Laravel не может найти маршрут, кроме случаев, когда маршрут назван

Я пытаюсь реализовать базовую систему аутентификации, используя только встроенные функции Laravel. Система работает, но только если я назначу имя маршруту / admin / login [т.е. ...-> name ('admin.login)]. Если я вытащу его, то получу следующее исключение.

ErrorException (E_ERROR) Маршрут [login.admin] не определен. (Просмотр: /var/www/html/shop/resources/views/auth/login.blade.php)

Раньше мне удавалось посещать безымянные маршруты, и я могу посещать другие безымянные маршруты, кроме /login/admin. Я надеялся, что кто-нибудь скажет мне, почему я получаю ошибку.

Маршруты

Auth::routes();

Route::get('/login/admin', 'Auth\LoginController@showAdminLoginForm')->name('login.admin');
Route::get('/login/staff', 'Auth\LoginController@showStaffLoginForm');
Route::get('/register/admin', 'Auth\RegisterController@showAdminRegisterForm');
Route::get('/register/staff', 'Auth\RegisterController@showStaffRegisterForm');

$ Url может иметь 2 значения: admin или staff.

Страница входа в систему

@isset($url)
   <form method="POST" action="{{ route('login.'.$url) }}">
@else
   <form method="POST" action="{{ route('login') }}">
@endisset

Команда routes:list также показывает, что маршрут существует, только безымянный.

    |        | GET|HEAD  | login/admin              |                  | App\Http\Controllers\Auth\LoginController@showAdminLoginForm           | web,guest,guest:admin,guest:staff |
    |        | POST      | login/admin              |                  | App\Http\Controllers\Auth\LoginController@adminLogin                   | web,guest,guest:admin,guest:staff |
    |        | GET|HEAD  | login/writer             |                  | App\Http\Controllers\Auth\LoginController@showWriterLoginForm          | web,guest,guest:admin,guest:staff |
    |        | POST      | login/writer             |                  | App\Http\Controllers\Auth\LoginController@writerLogin                  | web,guest,guest:admin,guest:staff |

person uhexos    schedule 25.02.2019    source источник
comment
/login/admin существует и в вашем Auth :: routes ()? Это могло быть отменой вашего именованного маршрута. Или попробуйте разместить свой именованный маршрут над Auth::routes()   -  person aynber    schedule 25.02.2019
comment
@aynber Я проверил маршруты, сгенерированные auth: routes, и не было конфликтующих маршрутов, которые они перезаписали. Я думаю, что ответ G-Man был правильным, и я отметил его как таковой. Спасибо за помощь.   -  person uhexos    schedule 25.02.2019
comment
В вашем первом параграфе это admin.login, но только если я назначу имя маршруту / admin / login [т.е. ...- ›name ('admin.login)], а затем в ваших маршрутах это login.admin ->name('login.admin');? В чем дело?   -  person Iftikhar uddin    schedule 25.02.2019
comment
@aynber Я проверил маршруты, сгенерированные auth: routes, и не было конфликтующих маршрутов, которые они перезаписали. Я думаю, что ответ G-Man был правильным, и я отметил его как таковой. Спасибо за помощь.   -  person uhexos    schedule 25.02.2019
comment
Встроенные функции laravel уже включают полную систему авторизации.   -  person dparoli    schedule 25.02.2019


Ответы (1)


Если я понимаю ваш вопрос и то, чего вы пытаетесь достичь ...

В лезвии входа в систему вы используете:

route('login.'.$url)

Для этого требуется имя маршрута. Вот что выдает ошибку:

ErrorException (E_ERROR)
    Route [login.admin] not defined. (View: /var/www/html/shop/resources/views/auth/login.blade.php)

Функция route () ищет имя маршрута.

Вместо использования пути маршрута для действия используйте фактический URL:

$url = Request::url();

поскольку вы пытаетесь перезагрузить ту же страницу.

(Есть много способов сделать это. Это только один способ. Но то, как вы это делаете, немного странно, ИМХО - хотя это действительно работает.)

person G-Man    schedule 25.02.2019
comment
Насколько я понимаю, он получал ошибку, пока не добавил имя маршрута, это сработало. - person G-Man; 25.02.2019
comment
Ах, возможно, ты прав. Я думаю, что вопрос нужно прояснить. - person Devon; 25.02.2019