89701


## 問題の要約

Laravel の勉強をしようと思って，Laravel
の本を読んでいます．そのサンプルコードの通りに書いているのに，なぜかエラーが出てしまうという問題です．

エラーメッセージは

> Target class [○○Controller] does not exist.

というものでした．

## 試したこと

心当たりがひとつだけあって，それは Laravel のバージョンの違いです．

教科書のサンプルコードは Laravel 6.x に基づいて書かれていますが，手元の環境でインストールされている Laravel のバージョンは 9.x
でした．

そこで，バージョンの違いに起因するエラーが出ているのだろうとあたりを付けたのですが，そこから先がわかりません．


CC BY-SA 4.0
2022-07-01T03:29:34.837
89700
2022-07-01T03:29:34.837
53010
question
laravel
古いバージョンのLaravel を使っているせいか，Target class [○○Controller] does not exist. というエラーが出る


Laravel のバージョンアップに伴い，複数の変更があります．

公式ドキュメントに詳しい変更点が書かれていますから，変更点を調べ上げてひとつひとつチェックしてください．

VSCode や PHPStorm
などのテキストエディタを使用しているなら，拡張機能などを使って「定義に飛ぶ」ということができます．これを使えばパスが正しいかどうか等をチェックできますから，活用してみてください．

以下，一般的によくあるエラーの原因を書きます．

## 1: Route文の書き方は正しいか？

### @があるとき

Laravel6.x では次のように Route 文を書きます．

[code]

    Route::get('/user', 'UserController@index');
    
[/code]

これは Laravel 9.x では次のように変更しないとエラーになります．

[code]

    Route::get('/user', [UserController::class,'index']);
    
[/code]

### @がないとき

もともと `@index` の部分がなく，次のように書かれていた場合，

[code]

    Route::get('/user', 'UserController');
    
[/code]

配列にせずに次のように書き換えます．

[code]

    Route::get('/user', UserController::class);
    
[/code]

## 2: パスは正しいか？

古いバージョンの Laravel には `Models` というディレクトリがなく，`app` の直下にモデルのファイルが置かれます．

そこで新しいバージョンに合わせる際には，`use` 文に続くパスを修正する必要があります．

合わせて `namespace` もチェックして，正しく参照がされるようにしてください．


CC BY-SA 4.0
2022-07-01T03:29:34.837
89701
2022-07-01T03:29:34.837
53010
89700
answer