ローディング規約

今更ながら、Laravelのローディングの名前はわかりにくい。
use句を見ても、それはどこにあるのか?と思ってしまう。

よく使うappフォルダーが、App/でトップに書いてあるので、不謹慎ながら、そんなものか、と慣れていたし、Illuminateというのがどこにあるのか最初に大変苦労したし、srcフォルダーはなんで無視されるのかわからなかったけど調べきれなかった。

Illuminateというのはlaravelの開発コード名なので、大事にしているらしい。
まだ、vender\laravel\ の配下にあるから探せたけど、これではわかりにくい。

パッケージ名と名前空間には別の名前を付けられるらしいが、そういうのは止めて欲しい。

Shopping CartのPackageを調べていて、gloudemans/shoppingcartというのが良さそうだったが、Laravel8までしか対応がなかった。

探していると同じような仕様で、hardevine/shoppingcartというのがあったので試してみた。
うまくいかない。エラー情報に、
Gloudemans\Shoppingcart\Cart::add(): Argument #5 ($options) must be of type array, int given, called in …
とある。
それはどこにあるのか?

というより、Gloudemansというのは見たような。

composer.json

Laravelのローディングは、composer.json ファイルにpsr-4として記述してある。
パッケージ名のディレクトリー下にもcomposer.jsonがあり、そこに詳しく書かれている。

ルートのcomposer.jsonでは、

    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },

で、appがAPPになっている。

\vendor\laravel\frameworkのcomposer.jsonでは、

        "psr-4": {
            "Illuminate\\": "src/Illuminate/",
            "Illuminate\\Support\\": [
                "src/Illuminate/Macroable/",
                "src/Illuminate/Collections/",
                "src/Illuminate/Conditionable/"
            ]
        }

となっており、Illuminateといえば、\vendor\laravel\framework\src\Illuminateのこと。

venderにhardevineフォルダーがあるので、composer.jsonを調べてみる。

 "autoload": {
        "psr-4": {
            "Gloudemans\\Shoppingcart\\": "src/"
        }
    },

ありました。
要するにhardevineとgloudemansは同じものということか。
でも、これは、わかりにくい。