Laravel中的Auth::routes为什么是这样写?

Laravel-5.5里的自带的认证系统中, 路由 Auth::routes()为什么是这样调用的?

而不是Routes::Auth()?

文件1: routes\web.php

<?php
Auth::routes();

文件2: vendor\laravel\framework\src\Illuminate\Routing\Router.php

    /**
     * Register the typical authentication routes for an application.
     *
     * @return void
     */
    public function auth()
    {
        // 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...
        $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
        $this->post('register', 'Auth\RegisterController@register');

        // Password Reset Routes...
        $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
        $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
        $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
        $this->post('password/reset', 'Auth\ResetPasswordController@reset');
    }
阅读 8.8k
2 个回答

先看源码,看看 Auth::routes( ) 其实是做了什么 ?

图片描述

// 如果你不知道 $app->make('router') 的返回值,dd() 打印一下就会知道是 Router 实例
static::$app->make('router')->auth();

底层其实还是手动创建了一个Router实例,并调用了它的auth方法,你所说的 Routes::Auth()也是这样的。

所以,无论你使用 Routes::Auth() 或者 Auth::routes() 其实都是生成 Router 实例并调用了它的 auth方法,作者为什么建议使用 Auth::routes() ,稍微动脑就能想到,Auth::routes()这种写法更容易让人知道生成的路由是和认证权限有关的,和 Auth::id() , Auth::check 等对应,更规范整齐。

简单来说 文件 2 才是 Route 组件的核心 所以写成 $this 很正常
文件 1 的话 需要看下文档的详细解释:
https://d.laravel-china.org/d...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题