kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

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');
                }
・・・
    }