あきぞらです。
新規でLaravel
のプロジェクトを作成するときは、Laravel8
を使います。
あるとき、Laravel8
を使ってルーティングの設定をしていると、
以下のようなエラーが発生してしまいました。
Illuminate\Contracts\Container\BindingResolutionException Target class [TestController] does not exist. at \Users\akizora\test\vendor\laravel\framework\src\Illuminate\Container\Container.php:835 831▕ 832▕ try { 833▕ $reflector = new ReflectionClass($concrete); 834▕ } catch (ReflectionException $e) { ➜ 835▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e); 836▕ } 837▕ 838▕ // If the type is not instantiable, the developer is attempting to resolve 839▕ // an abstract type such as an Interface or Abstract Class and there is
今回はこのエラーの対処方法について紹介していきます。
Laravel8以降ではルーティングの書き方が少し異なる
Laravel8以降では、ルーティングの書き方が少し異なるようです。
これまでは以下のような記述でうまくいけました。
以下は、api.php
です。
<?php use Illuminate\Http\Request; Route::resource('test', 'TestController')->only(['store']);
Laravel8以降では、以下のように書き方を変える必要があります。
<?php use Illuminate\Http\Request; use Illuminate\Support\Facades\Route; use App\Http\Controllers\TestController; Route::resource('test', TestController::class, ['only' => ['store']]);
「ちょっと書き方が変わっていやだな~」と思うかもしれませんが、
個人的にはLaravel8
の書き方はuse
する個所は増えますがシンプルでけっこう好きです。
バージョンアップなどの際には注意が必要です。