LaravelのClass ‘App\Http\Controllers\Controller’ not found:原因と解決策

はるか
はるか
うわ。「Class ‘App\Http\Controllers\Controller’ not found」・・・。なにこれ、やる気なくした。寝よ。
ふゅか
ふゅか
あー、それって名前空間の設定ミスが主な原因よね!

1. 問題の概要

Laravelアプリケーションを開発している際に、エラーメッセージ「クラス ‘App\Http\Controllers\Controller’ が見つかりません」と表示されることがあります。このエラーは、主にコントローラーの名前空間が正しく設定されていない場合に発生します。

2. エラーの原因

このエラーが発生する一般的な原因は、コントローラーファイル内で宣言された名前空間が正しくないことです。Laravelでは、コントローラーは通常 App\Http\Controllers に配置されるため、名前空間もこれに一致している必要があります。

例えば、以下のようなコントローラーがあるとします:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SampleController extends Controller
{
    // コントローラーメソッド
}

上記の例では、コントローラー SampleControllerApp\Http\Controllers 名前空間内に配置されていることがわかります。

3. 解決策

3.1. 名前空間を確認する

まず、コントローラーファイル内の名前空間宣言が正しいか確認しましょう。コントローラーが App\Http\Controllers ディレクトリ内にある場合、名前空間は以下のように設定されているべきです。

namespace App\Http\Controllers;
はるか
はるか
名前空間が一致していれば、エラーは出ないはず。

4. エラーの検証と修正

まず、エラーの検証を行います。エラーの検証後に修正を行います。以下の画像のようにエラーが表示されるコードを意図的に作成します。


4.1. 検証環境

今回の検証環境は次のようになります。

  • PHP 8.1.25
  • Laravel 10.48.12
  • Windows 11

4.2. コントローラーの作成

最初に、コントローラーを作成します。以下のコードを使用して、SampleControllerを作成します。

<?php

namespace App\Http\Controller;

use Illuminate\Http\Request;

class SampleController extends Controller
{
    public function index(){
        return response("Hello");
    }
}

このコードでは、SampleControllerという名前のコントローラーを作成し、indexメソッドを定義しています。このメソッドは文字列「Hello」を返すようになっています。

はるか
はるか
このコードは意図的に名前空間が間違っている。これでエラーを確認する。

4.3. ルーティング

ふゅか
ふゅか
次に、ルーティングを設定しましょう。

次に、web.phpファイルでルーティングを設定します。以下のコードを追加してください。

use App\Http\Controllers\SampleController;

Route::get('/', [SampleController::class,"index"]);

このルーティング設定により、ブラウザで http://127.0.0.1:8000/ にアクセスすると、SampleControllerindex メソッドが実行されます。

4.4. エラーの原因と修正方法

ここで、php artisan serve コマンドを実行し、ブラウザで http://127.0.0.1:8000/ にアクセスします。目的としていた画像のようなエラーが発生します。



このエラーは、namespaceの設定が誤っていることが原因です。正しくは App\Http\Controllers であるべきところが、App\Http\Controller になっています。

次のように修正してください。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class SampleController extends Controller
{
    public function index(){
        return response("Hello");
    }
}

これで、再度 php artisan serve コマンドを実行し、ブラウザで http://127.0.0.1:8000/ にアクセスすると、次の画像のように「Hello」と表示されるはずです。



このようにして、エラーの検証と修正が完了しました。正しいnamespaceを使用することを忘れないようにしましょう。

はるか
はるか
エラーの検証と修正が完了。
ふゅか
ふゅか
うん、これでエラーは解決ね!また困ったら聞いてね♪
PR