在这种情况下,为什么route()在Laravel上有效?

时间:2019-02-28 09:12:35

标签: php mysql laravel view

这是我的环境-> Laravel 5.7,PHP 7.1,Mysql 5.7

我是Laravel的新朋友。 我使用make:auth的命令来使用认证系统,然后由login.blade.php进行认证。 在login.blade.php中,此行是默认行。

<form method="POST" action="{{ route('login') }}">

按照规则,我尝试在Name中找出loginroute:list的{​​{1}},但是奇怪的是没有这样的名称。

| 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方法的记录中,因为根据form,它是POST方法,对吗? 即使route:list中没有Name,此应用程序也可以以某种方式工作。

我戴上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();
        }
    }

能请你帮我吗? 我期待着您回答这个问题。 谢谢。

1 个答案:

答案 0 :(得分:1)

命名路由仅在此处用于轻松生成URLs。因此,命名路由仅是为了简化代码维护,这不是必需的。

您必须记住,命名仅引用路由声明的URI部分,没有方法定义

因此,用相同的URI和不同的method命名两个路由声明是多余的,因为您必须给它们指定相同的名称。而且,如果您不提供相同的名称,您将拥有两个具有相同URL构造函数的命名路由。

这就是为什么您看到这样的代码的原因:

$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');

第二行不需要不需要名称,因为它已经从第一行开始了。