こんにちはフロントエンドエンジニアのまさにょんです!
今回は、Laravelで、Target class [xxxController] does not exist: のエラーが発生したときに解決する方法について解説していきます。
目次
Target class [xxxController] does not exist: のエラーはなぜ起こる?
実は、この「Target class [xxxController] does not exist: 」エラーは、Laravel のバージョン8以降で発生するものになります。
Laravel のバージョン8以降から、RouteServiceProvider.php ファイルの設定が変わった影響で、
web.phpでルーティングを使おうとしても、上記のエラーが発生します。
エラー解決の方法は、いくつかあるのですが、今までのルーティングの記述方法をそのまま使用するための方法と、
新しい記述の方法によるエラー解決の2つの方法を紹介します。
エラー解決方法-1: RouteServiceProviderのファイルを最適化する
Laravel のバージョン8以降から、RouteServiceProvider.php ファイルの設定が変わったので、
そのファイルの設定を最適化することで、エラーを解決することができます。
Laravel 8系なら、1ヶ所のコメントアウトを解除する
Laravel 8系なら、RouteServiceProvider.php ファイルの次のコメントアウトを解除すれば、エラーは解決します。
FilePath(相対Path)は [ /app/Providers/RouteServiceProvider.php ] になります。
// protected $namespace = 'App\\Http\\Controllers';
Laravel 9系なら、2ヶ所にコードを追加する必要がある
FilePath(相対Path)は [ /app/Providers/RouteServiceProvider.php ] になります。
<?php
namespace App\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
// FilePath: [ /app/Providers/RouteServiceProvider.php ]
class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the "home" route for your application.
*
* Typically, users are redirected here after authentication.
*
* @var string
*/
public const HOME = '/home';
// 追加!!
protected $namespace = 'App\\Http\\Controllers';
/**
* Define your route model bindings, pattern filters, and other route configuration.
*
* @return void
*/
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace) // 追加!!
->group(base_path('routes/web.php'));
});
}
/**
* Configure the rate limiters for the application.
*
* @return void
*/
protected function configureRateLimiting()
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}
}
エラー解決方法-2: 新しい書き方でルート設定を記載する
新しいルート設定の書き方に変更することで、エラーを解決することもできます。
作成したコントローラーを追加する
web.php または api.php のどちらか、ルーティングの設定をするファイルに、作成したコントローラーを use文で追加します。
// 1. 作成したコントローラーを追加する!
use App\Http\Controllers\RobotamaController;
ルーティングを新しい書き方で設定する
use文を追加したら、ルーティングを新しい書き方で設定します。
// 以前のルーティングの記述方法
// Route::get('/robotama', 'RobotamaController@robotama_price_list');
// 新しいルーティングの記述方法
Route::get('/robotama', [ RobotamaController::class, 'robotama_price_list' ]);
Twitterやってます!Follow Me!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!