Laravel 找不到路由,除非路由被命名

Laravel fails to find route except when the route is named

我正在尝试仅使用 built-in Laravel 功能来实现基本身份验证系统。该系统可以工作,但前提是我为 /admin/login 路由分配了一个名称 [即 ...->name('admin.login)]。如果我把它拿出来,我得到的异常如下。

ErrorException (E_ERROR) Route [login.admin] not defined. (View: /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。

登录blade页面

@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 |

如果我理解你的问题和你想要完成的事情...

在您的登录 blade 中您使用:

route('login.'.$url)

这需要路线名称。这就是抛出错误的原因:

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

route() 函数查找路由名称。

不要使用 Action 的路由路径,而是使用实际的 URL:

$url = Request::url();

因为您要做的是重新加载同一页面。

(有很多方法可以做到这一点。这只是一种方法。但是,恕我直言,你这样做的方式有点奇怪 - 尽管它确实有效。)