Laravel8でTarget class [xxxController] does not exist.エラー

PHP
スポンサーリンク

Laravelの学習をしていて、参考資料や動画を見てそのままコードを入力すると以下のようなエラーがでたので備忘録として書きます。

Laravel8でnot exist.エラー

私の環境は、現段階では最新のLaravelバージョン8を使用して、学習しているのですがLaravel8の場合はRouteServiceProvider.phpファイルからデフォルトの名前空間を削除されているらしい。

なので参考資料などの通りルーティング設定で

Route::get('hello','HelloController@index');

と書いてしまうと以下のようなエラーが出ると思います。

コントローラーが存在しません??? なぜ?

原因は、Laravel8ではweb.phpに以下のように完全な名前空間で記載する必要があるみたいです。

Route::get('hello','App\Http\Controllers\HelloController@index');

Larabel8を使って学習している人は、はまると思うので注意しましょう!私も30分ぐらいはまりました。。。

以前のLaravelバージョンと同様に使用したい場合

また、以前のバージョンと同様にコントローラー名@アクション名だけを書きたい場合は、app\Providers\RouteServiceProvider.phpに以下を追加したらこれまで通りで利用可能みたいです。


   /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    protected $namespace = 'App\http\Controllers'; /** この行を追加
     public function boot()
    {
        $this->configureRateLimiting();

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));

            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
    }

コメント

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