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-&gt;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 找不到路由,除非路由被命名的主要内容,如果未能解决你的问题,请参考以下文章

laravel 设置好了路由为啥找不到控制器

Laravel 5.1 找不到路由对象

使用 https 找不到 Laravel 路由

安装 nginx 后找不到 Laravel 路由

Laravel + Vue JS 路由显示找不到页面

使用 Laravel 路由时找不到 404 错误