PHP・Laravelの勉強中 ログイン機能のController
13:45
①3日前からのつづき『しかし、Laravel8のログイン機能のController達のプログラム内容が、さっぱりわからない。』をやっている。
①-1. web.phpのAuth::routes();について分かったこと。
・C:\laravel-project\sample-project\routes\web.phpのAuth::routes();にログイン機能のルーティングが書いてある。ので、調査
・web.phpに、use Illuminate\Support\Facades\Auth;と書いてあるので、Auth::routes();は Illuminate\Support\Facades\Auth.phpのことで、
・「public static function routes(array $options = [])」のことだった。
・そしてこの関数には「static::$app->make('router')->auth($options);」とある。
make('router')のrouterとは、「C:\laravel-project\sample-project\vendor\laravel\framework\src\Illuminate\Support\Facades\Route.php」・
「class Route extends Facade」の「getFacadeAccessor()」に書いてある「return 'router';」のことだった。
疑問:$app->make('router')って、new Auth.php-じゃダメなのか?と調べたら、
Laravelのサービスコンテナにサービスコンテナ(app()) にインスタンスを作ってもらう時は
$app->make('router')って書くって、あった。さらにLaravelでは$app->makeしか使わなくなるって書いてあった。
・Route.phpについて、\laravel\uiパッケージの「C:\laravel-project\sample-project\vendor\laravel\ui\composer.json」に
以下のように書いてある
・composer.json "extra": { "branch-alias": { "dev-master": "3.x-dev" }, "laravel": { "providers": [ "Laravel\\Ui\\UiServiceProvider" ] } },
"Laravel\\Ui\\UiServiceProvider"により、「use Illuminate\Support\Facades\Route;」のRoute.phpに
Laravel\Ui\AuthRouteMethods.phpの内容がmixinされている。
・Laravel\\Ui\\UiServiceProvider" public function boot() { Route::mixin(new AuthRouteMethods); }
なので、「static::$app->make('router')->auth($options);」は
Laravel\Ui\AuthRouteMethods.phpのauth()のことだった。
補足:実フォルダはC:\laravel-project\sample-project\vendor\laravel\ui\src\AuthRouteMethods.php
だけど、「C:\laravel-project\sample-project\vendor\laravel\ui\composer.json」に
「"autoload": { "psr-4": {"Laravel\\Ui\\": "src/",・・・」あるので、srcが抜けてl→Lとu→Uになっている。
こんな風に書いてある。
・Laravel\Ui\AuthRouteMethods.php public function auth() { return function ($options = []) { $namespace = class_exists($this->prependGroupNamespace('Auth\LoginController')) ? null : 'App\Http\Controllers'; $this->group(['namespace' => $namespace], function() use($options) { // Login Routes... if ($options['login'] ?? true) { $this->get('login', 'Auth\LoginController@showLoginForm')->name('login'); $this->post('login', 'Auth\LoginController@login'); } ・・・ }