laravel8を使っていた際に、単純なルーティングをしようとしたら、「Target class [コントローラ名] does not exist」とエラーになったので解決方法をまとめてみました。
エラーの原因としては、従来のLaravelとLaravel8では、ルーティングの書き方が少し違うようです。
下記が従来のルーティングの書き方でした。
//Route::メソッド名('ルートURL', '処理');
Route::get('test', 'TestController@index');ただしこのように書くと、Laravel8では「Target class [コントローラ名] does not exist」とエラー表示になってしまいます。
Laravel8でルーティングするためには、下記のポイント2つを抑える必要があります。
ルーティングファイル(web.php)の冒頭に、ルート定義で使用するコントローラをuseを使用してインポートする。
TestControllerやContactFormControllerを使用する場合、ルーティングファイルの冒頭に下記のように記述する必要があります。
use App\Http\Controllers\TestController;
use App\Http\Controllers\ContactFormController;これによって、コントローラがインポートされます。
ルーティングを記述する。
下記の書き方で、ルーティングを記述します。
//indexやshowなどを第二引数で書く場合
Route::get('tests/test', [TestController::class, 'index']);
Route::get('contact/index', [ContactFormController::class, 'index']);
//第二引数がない場合
Route::get('tests/test', TestController::class);
Route::get('contact/index', ContactFormController::class);よって、web.phpの全体像は下記のようになります。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TestController;
use App\Http\Controllers\ContactFormController;
Route::get('/', function () {
return view('welcome');
});
Route::get('tests/test', [TestController::class, 'index']);
Route::get('contact/index', [ContactFormController::class, 'index']);これで、一旦エラーは解決できて無事にルーティングができました。
![【Laravel8】ルーティングで「Target class [コントローラ名] does not exist」がでたときの対処法](/wp-content/uploads/2021/06/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%95%E3%82%99%E3%83%AD%E3%82%AF%E3%82%99%E3%80%80%E3%82%A2%E3%82%A4%E3%82%AD%E3%83%A3%E3%83%83%E3%83%81%E7%94%BB%E5%83%8F%E3%80%80%E3%81%AF%E3%81%A6%E3%83%95%E3%82%99%E3%80%80Blog-1.jpg)




