Laravelでcomposerを利用したクラスのオートロードがうまくいかない場合、下記のワンライナーでComposerが持っているクラスマップをダンプできます。
% ./artisan tinker
Psy Shell v0.10.5 (PHP 7.3.11 — cli) by Justin Hileman
>>> echo json_encode((require "vendor/autoload.php")->getPrefixesPsr4(), JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
{
"voku\\": [
".../app/vendor/composer/../voku/portable-ascii/src/voku"
],
"phpDocumentor\\Reflection\\": [
".../app/vendor/composer/../phpdocumentor/reflection-common/src",
".../app/vendor/composer/../phpdocumentor/reflection-docblock/src",
".../app/vendor/composer/../phpdocumentor/type-resolver/src"
],
"XdgBaseDir\\": [
".../app/vendor/composer/../dnoegel/php-xdg-base-dir/src"
],
"Whoops\\": [
".../app/vendor/composer/../filp/whoops/src/Whoops"
],
...
作ったネームスペースがこの一覧にない場合、下記の作業漏れである場合があります。
composer.jsonのautoload定義を書き忘れている。例えばpackages/Acme/Foo.phpに"namespace Acme"のFooクラスを生成する場合、下記の定義が必要です。
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
"Acme\\": "packages/Acme/",
}
},
autoloadした後にコマンドを実行し忘れている。composer.jsonでautoloadを変更した場合、composer dumpautoload
コマンドを実行します。
% composer dumpautoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
...
Generated optimized autoload files containing 4612 classes
こちらもおススメ