今更ながら、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は同じものということか。
でも、これは、わかりにくい。