【Laravel】Target class [Controller] does not exist.というエラーの対処法

こんな画面が出た。

私自身あまり詳しくないのですが、調べていくと[ use ]というのを使ってパスを記述する必要があるそうです。

laravelのバージョンは10です。

エラー出たときの状態

wep.php

Route::get('/hello', [HelloController::class, 'index']);

HelloController.php

class HelloController extends Controller
{

    public function index()
    {
        return view('hello');
    }

}

hello.blade.php

<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ハロー</title>
</head>

<body>
    <h1>ハロー!ハロー!</h1>
</body>

</html>

対処法

2つあります。

最初の対処法がおすすめです。

① useでパスを省略

変えるのはweb.phpだけ。

web.php

<?php

use App\Http\Controllers\HelloController; ←これを追加

~省略~

Route::get('/hello', [HelloController::class, 'index']);

useは <?php の真下に書きます。

デフォルトで他のuseが記述されてるはずなのでそこに一緒に記述しましょう。

useでパスを省略しました。

laravelのuseについてはこの方の記事を参考にしました。

② パスを全部書く

web.php

Route::get('/hello', [App\Http\Controllers\HelloController::class, 'index']);

このようにuse使って省略せずに全部ここでパスを書いちゃうのもアリ。

さっきのuseの後の記述をRoute::getに持ってきただけですね。

公式ドキュメントも見ておくといいかも↓

10.x ルーティング Laravel

まとめ

参考にした記事では当たり前のようにパス省略しているので知らなかった。

そういうのは先に言ってほしい。

タイトルとURLをコピーしました