laravel8で「Target class does not exist」の治し方

製作 プログラム

最終更新日:2022/05/07

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

laravel8で新規アプリを作ってたらいきなり「Target class [Controller名] does not exist」のエラーが。いやまだ何も始まってないくらいの序盤の序盤でエラー…。

私は過去に作ったlaravelアプリからコピペしてだいたいの感じで作っていくんですが、ただコピペしただけなのにコントローラーがない?そんなおかしな…。

と思ったら解決したんで、laravel8で「Target class [Controller名] does not exist」で出たときの治し方を。

  1. 絶対パス?で書けばOK
  2. 原因
  3. laravel7→laravel8だと起こらない
  4. まとめ

絶対パス?で書けばOK

先に「Target class [Controller名] does not exist」の治し方から。

これはweb.phpの修正だけで治ります。

web.php変更前

Route::get(‘/’, ‘Controller@welcome’);

web.php変更後

Route::get(‘/’, ‘App\Http\Controllers\MController@welcome’);

はい!これだけ!

変わったのはコントローラー名の前に「App\Http\Controllers\」がついてるだけ。これで「Target class [Controller名] does not exist」が出なくなります。

原因

完全にほかの記事の方がくわしいんでアレなんですが、laravel8でなんか相対パスじゃダメになったみたい。もうちょい深く言うとこれまで(laravel7まで)は相対パスでOKなようにどこかにそういう宣言がされてて、web.phpはそれを読み込んでたみたい。ただ、この宣言(雰囲気でいうと環境変数pathみたいなもの?)がlaravel8から無くなってるので相対パスだとエラーになる、と。

という事で「App\Http\Controllers\」をつけて絶対パスでここのコントローラー使って!とweb.phpに書いてる感じ。

laravel7→laravel8だと起こらない

このエラー「Target class [Controller名] does not exist」はlaravel7からlaravel8にアップデートした場合には発生しません。

発生しません、って言いきってますが私の環境だと発生しませんでした。

推測なんですがlaravel7までにあったという相対パスおーけーだよ~!っていう環境変数pathみたいな宣言がlaravel8にアップデートした後もそのまま残ってるからだろうなと思います。

とりあえず新規でlaravel8で作る場合にのみ起こる、と。

まとめ

今回はlarav8で発生するエラー「Target class [Controller名] does not exist」の治し方と原因を書きました。

ホントはクイッタ?ていうサイトで紹介されてる解決方法の記事が一番わかりやすいんですが、クイッタってごくまれにクイッタ内で注目集めてから「こっち(自分のブログ)に記事移転しました。リンク一行だけ表示ー」みたいな露骨な自サイト宣伝があるからリンク張りたくなくて。なんだかそういうのってセコいなーって。

詳細に原因のコト、それから解決方法も書いてくれているのでよかったらそっちも見てみてくださいね。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /