Laravel ターゲットクラスが存在しないエラーの原因と解決方法

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'));
});
}