【发布时间】:2019-02-28 09:12:34
【问题描述】:
这是我的环境 -> Laravel 5.7、PHP 7.1、Mysql 5.7
我是 Laravel 的新手。
我使用make:auth 的命令来使用身份验证系统,然后login.blade.php 是由它创建的。
在login.blade.php 中,此行是默认的。
<form method="POST" action="{{ route('login') }}">
按照规则,我试图在route:list中找出login的Name,但奇怪的是没有这样的名字。
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| | POST | login | | App\Http\Controllers\Auth\LoginController@login | web,guest |
| | GET|HEAD | login | login | App\Http\Controllers\Auth\LoginController@showLoginForm | web,guest |
它应该在POST-method的记录中,因为根据form,它是POST方法,对吗?
即使route:list 中没有名称,此应用程序也能以某种方式工作。
我穿上Router.php的绳子以防万一。
public function auth(array $options = [])
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
if ($options['register'] ?? true) {
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
}
// Password Reset Routes...
if ($options['reset'] ?? true) {
$this->resetPassword();
}
// Email Verification Routes...
if ($options['verify'] ?? false) {
$this->emailVerification();
}
}
你能帮帮我吗? 我期待你回答这个问题。 谢谢。
【问题讨论】:
-
POST /login 和 GET /login 的路由名称相同,并且应该相同,因为它们指向相同的 URI。唯一改变的是http方法,但URI是一样的。
-
因为 route 方法只会生成你的路由的路径,它不关注表单中的 http 方法,它只是轻松生成
login路径的助手 -
@dparoli @Julian Metral 感谢您的回答。那么,在 POST 方法的
Name列中是否省略了login类型?如果是这样,我完全理解这就是我可以登录页面的原因。 -
是的,这个名字是为
URI而不是组合HTTP METHOD : URI。这就是为什么POST /login没有名称,它已经在GET /login中分配了一个名称。您始终可以选择如何使用您想要的方法调用命名路由,只需确保在您的路由文件中声明了方法+URI。