Laravelでweb.phpファイルにコントローラーを呼び出すコードを書いた矢先に以下のエラーが発生。
Target class [(コントローラー名)] does not exist.
エラーの原因
RouteServiceProvider.phpファイルのデフォルトの名前空間を削除されたことが原因。
以前は以下のようなプログラムとなっていた。
protected $namespace = 'App\Http\Controllers'; //該当の部分
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
それがLaravel6ではこんな感じ。
//ここに「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'));
});
}
エラーの解決方法
『protected $namespace = ‘App\Http\Controllers’;』を記述して、名前空間を追加する。
これで問題なく処理が通った。
なお、参考にしたサイトによると他にも2つ解決方法があるらしいが、手動で名前空間を追加して問題なく動作したので未検証。
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'));
});
}