環境
PHP 7.3.8
Laravel 6.20.16
Docker 19.03.8
Target class [...] does not exist.というエラー
Docker環境でlaravelクイズアプリを作成中、
サンプルで問題とカテゴリーデータをシーダーでデータベースに入れようとした時に怒られた話。
php artisan db:seed
上記コマンドを実行した際に下記エラーが発生。
Illuminate\Contracts\Container\BindingResolutionException : Target class [CategoryTableSeeder] does not exist.
at /var/www/html/app/vendor/laravel/framework/src/Illuminate/Container/Container.php:805
801|
802| try {
803| $reflector = new ReflectionClass($concrete);
804| } catch (ReflectionException $e) {
> 805| throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e);
806| }
807|
808| // If the type is not instantiable, the developer is attempting to resolve
809| // an abstract type such as an Interface or Abstract Class and there is
Exception trace:
1 ReflectionException::("Class CategoryTableSeeder does not exist")
/var/www/html/app/vendor/laravel/framework/src/Illuminate/Container/Container.php:803
2 ReflectionClass::__construct("CategoryTableSeeder")
/var/www/html/app/vendor/laravel/framework/src/Illuminate/Container/Container.php:803
Please use the argument -v to see more details.
結論から申し上げると、次のコマンドで解決した。
composer dump-autoload
ググると早々にそれっぽい記事は沢山出ていくるわけなんですが、
Docker環境で検証している時にdump-autoload
してもダメじゃねーかと言う事があったんですよ。
でもそれってdump-autoload
を実行してからGenerating optimized autoload files
と表示された後に待ちきれずにcommand+C
してて、ちゃんと実行出来てなかっただけと言うオチ。
Dockerだからか、結構実行終わるまで時間がかかるみたいで、最後まで待たないといけなかったと言う悲しい話。
root@:/var/www/html/app# composer dump-autoload
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 4259 classes
最後まで見届けてから、db:seed
する事で無事にseederを実行する事が出来ました。
root@:/var/www/html/app# php artisan db:seed
Seeding: CategoryTableSeeder
Seeded: CategoryTableSeeder (0 seconds)
Seeding: QuizTableSeeder
Seeded: QuizTableSeeder (0 seconds)
Database seeding completed successfully.