Laravel 找不到路由,除非路由被命名
Posted
技术标签:
【中文标题】Laravel 找不到路由,除非路由被命名【英文标题】:Laravel fails to find route except when the route is named 【发布时间】:2019-07-19 06:50:59 【问题描述】:我正在尝试仅使用内置 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 |
【问题讨论】:
/login/admin
是否也存在于您的 Auth::routes() 中?那可能会覆盖您的命名路线。或尝试将您命名的路线放在Auth::routes()
上方
@aynber 我检查了 auth:routes 生成的路由,没有冲突的路由被覆盖。我认为 G-Man 的答案是正确的,我已将其标记为正确。感谢您的帮助。
在您的第一段中,它是 admin.login
“但前提是我为 /admin/login 路由 [ie ...->name('admin.login)] 分配了一个名称,”和那么在你的路线中是login.admin
->name('login.admin');
?怎么回事?
@aynber 我检查了 auth:routes 生成的路由,没有冲突的路由被覆盖。我认为 G-Man 的答案是正确的,我已将其标记为正确。感谢您的帮助。
内置的 laravel 功能已经包含了完整的授权系统。
【参考方案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,而不是使用 Action 的路由路径:
$url = Request::url();
因为您正在尝试重新加载同一页面。
(有很多方法可以做到这一点。这只是一种方法。但是,恕我直言,你这样做的方式有点奇怪——尽管它确实有效。)
【讨论】:
我的理解是,在他添加路线名称之前,他得到了错误,它起作用了。 啊,你可能是对的。我认为这个问题需要更清楚。以上是关于Laravel 找不到路由,除非路由被命名的主要内容,如果未能解决你的问题,请参考以下文章