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']);
これで、一旦エラーは解決できて無事にルーティングができました。