開発環境
- Mac OS Monterey(バージョン12..2.1)
- MacBook Air (M1)
- composer version 2.0.9
- Laravel Framework 10.10
Todoアプリのバックエンド側を実装中、Laravelでルーティングの設定をしており、ルートの確認をしようと以下を実行
php artisan route:list
すると…
Class "PostController" does not exist
とエラー表示が!!!
PostControllerが存在しないと怒られている…が、PostControllerはあるんだけどな〜となりました。
色々調べていると、どうやらver7→ver8で、この辺のルーティングの設定方法が異なっているっぽいことが判明。
いくつかのサイトを参考にしたので、追記しておきます。
試したこと
今回試したこととしては、以下になります。
- RouteServiceProvier.phpで名前空間を追記
- アクション構文の使用
- オートローダーの実行
RouteServiceProvider.phpで名前空間を追記
こんな感じで、/homeの下に、protected $namespace = 'App\Http\Controllers';
を追加。
public const HOME = '/home';
protected $namespace = 'App\Http\Controllers';
このタイミングで、以下の部分にも追記を行った。
public function boot(): void
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
$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'));
});
コマンドを実行するも、変化なし。
アクション構文の使用
こちらは、既にやっていたもののとりあえず、再度確認。
//todo作成
Route::get('/todo', [PostController::class, 'create']);
//todo一覧表示
Route::post('/posts', [PostController::class, 'index']);
//todo削除
Route::delete('/todoDelete', [PostController::class, 'todoDelete']);
オートローダーの実行
オートローダーがPHPクラスを見つけることができず、エラーが発生しているのではないかと思いこちらを実行。
composer dump-autoload -o
こちらも変化なし。
※オートローダーとは
→ファイルを自動で読み込む仕組みのこと。これがあると、requireをしなくても名前空間を指定するだけで、クラスを使用できる。
特に解決法が見つからないまま、画像検索をしていたらあることに気づいた。
「namespaceの部分1つしか追記してないな〜」
というのも、api.phpは特に設定したりしていなかったので、特別気にしていなかった。
ということで、改めて、apiの方にも追記。
public function boot(): void
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
$this->routes(function () {
Route::middleware('api')
->namespace($this->namespace)//←追記
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)//←追記
->group(base_path('routes/web.php'));
});
}
これでコマンドを実行すると…
表示できた!!!
色んなサイト渡り歩きましたが、上記3つをするとほぼ解決するみたいです。
僕みたいに、見落としてる可能性もあると思うので、同じ実装になってるかはちゃんと確認をした方が良さそうですね(自戒)
参考