LaravelのAuth::routes()は、なぜ1行書くだけでルーティングが設定できるの?

カテゴリ: Laravel | タグ: ,

Laravelではauthパッケージのセットアップを行うと、routes/web.phpに下記の1行を書くだけでルーティングが自動設定されます。

Auth::routes();

どうして1行書くだけでルーティングを設定できるのでしょうか? Auth::routes()は何をしているのでしょうか? 気になったので、調べてみました。

Auth::routes()が行っていること

Auth::routes()​メソッドの処理を順に追っていくと、Laravel\Ui\AuthRouteMethods::auth()の呼び出しにたどり着きます。

auth()メソッド

Laravel\Ui\AuthRouteMethods::auth()で、ルーティング設定を行っています。

class AuthRouteMethods
​
    public function auth()
    {
        return function ($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();
            }
​
            // Password Confirmation Routes...
            if ($options['confirm'] ??
                class_exists($this->prependGroupNamespace('Auth\ConfirmPasswordController'))) {
                $this->confirmPassword();
            }
​
            // Email Verification Routes...
            if ($options['verify'] ?? false) {
                $this->emailVerification();
            }
        };
    }



上記のクラスはUiServiceProviderでmixinされています。

  • UiServiceProvider.php
namespace Laravel\Ui;
​
use Illuminate\Support\Facades\Route;
​
class UiServiceProvider extends ServiceProvider
    public function boot()
    {
        Route::mixin(new AuthRouteMethods);
    }




UiServiceProviderは、composer.jsonで自動ロードされるようになっています。

vendor/laravel/ui/composer.json
{
    "extra": {
        "laravel": {
            "providers": [
                "Laravel\\Ui\\UiServiceProvider"
            ]
        }
    },

この自動ロードの仕組みによって、自動でUiServiceProviderがシステムに登録されます。

Amazonでポイントを賢くGETする方法
Amazonギフト券チャージ で最大2.5%もお得!
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。