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がシステムに登録されます。
こちらもおススメ