MENU

【Laravel8】ルーティングで「Target class [コントローラ名] does not exist」がでたときの対処法

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']);

これで、一旦エラーは解決できて無事にルーティングができました。

独学に限界を感じたら、プログラミング教室がお勧めです。
エージェントは複数登録することをお勧めします。カウンセリングを通して、業界について勉強することができます。
フリーランス転職希望の方はフリーランス専門のエージェントを利用しましょう。
独学に限界を感じたら、プログラミング教室がお勧めです。
エージェントは複数登録することをお勧めします。
カウンセリングを通して、業界について勉強することができます。
フリーランス転職希望の方はフリーランス専門のエージェントを利用しましょう
よかったらシェアしてね!
  • URLをコピーしました!
目次