Laravelで次のようなエラーが表示された時の対策をご紹介します。
まず、ルート設定を記述してあるファイルroutes/web.phpを開いてみてください。
そこに、次のような形でルートをいれていませんか?
Laravel8以上では、この書き方をしているとエラーになります。エラーを解決するための対策を3点解説しますね。
ご利用の環境にあわせて、ルート設定を変更してください。
エラー対策① RouteServiceProviderにコードを加える
一つ目の対策は、Providers/RouteServiceProviderファイルにコードを加える方法です。
Laravel8とLaravel9では、処理がやや異なります。
まずLaravel8について解説します。
Laravel8の場合
Providers/RouteServiceaProvider.phpファイルを開きます。
29行目あたりに、次のようなコードが入っています。
この部分のコメントアウトを解除し、コードを有効にしておきましょう。
1 |
protected $namespace = 'App\\Http\\Controllers'; |
ちなみに この部分、Laravel7まではデフォルトで有効になっていました。Laravel8からは、デフォルトでは、上記のようにコメントアウトされています。
Laravel9の場合
Laravel9の場合には、上記のLaravel8の設定に加え、38行目あたりに下記コードを加えておきましょう。
1 2 3 4 5 |
Route::middleware('web') // 追加箇所 ->namespace($this->namespace) ->group(base_path('routes/web.php')); }); |
これによって、 protected $namespace = 'App\\Http\\Controllers'; の設定を web.phpのルート設定で有効にできます。
Laravel8ではこの部分はデフォルトでついていました。ですが、Laravel9では、削除されています。そのため手動で追加が必要です。
エラー対策② ルート設定にコントローラーの場所を記載する
二つ目の方法です。
routes/web.phpファイルの中のルート設定に、コントローラーの場所を入れてください。
たとえば、下記のようにルート設定を入れているとします。
【変更前】
エラー対策③ 公式サイトにある方法でルート設定を記載する
三つ目の方法は、最新のルート設定の書き方に変更することです。
たとえば、下記のようにルート設定を入れているとします。
【変更前】
use App\Http\Controllers\PostController;
Route::get(‘post’, [PostController::class, ‘index’])->name(‘post.index’);
ルート設定の書き方は、公式マニュアルも参考になります。
さいごに
Laravelのルート設定方法は、バージョンアップした際に変わっています。
従来の書き方をする場合は、設定を変更しないとエラーになります。今回ご紹介したとおり、Laravel8とLaravel9で設定方法が変わっていたりするので、ご注意を!
なお、わたしのほうでは「Laravelの教科書」という学習サイトを運営しています。
「Laravelの教科書」には、Laravel8版とLaravel9版の2つのバージョンのテキストをご用意しています。
Laravel8版では、今回ご紹介した形でRouteServiceProviderファイルの設定を変えてルート設定を記述する方法を採用しています。Laravel9版は、Laravel9公式マニュアルに沿った形のルート設定を採用しています。
「ルート設定も含めて、Laravelのコードの書き方をいちから学びたい」
と思ったら、下記ボタンをクリックして詳細を見てみてくださいね。
基礎編部分は無料です。