woodman0224
@woodman0224 (林 正)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

500エラーの解決策がわからない

解決したいこと

この記事を参考にSPAの学習をしています。

記事の(7)までの新規登録ログイン機能の実装で500エラーが返されます。

実際に登録ボタンを押して検証ツールのネットワークタブで確認したらこのようなメッセージが返ってきました。

発生している問題・エラー

{message: "Target class [Auth\RegisterController] does not exist.",…}
exception
: 
"Illuminate\\Contracts\\Container\\BindingResolutionException"
file
: 
"/var/www/html/vuesplash/vendor/laravel/framework/src/Illuminate/Container/Container.php"
line
: 
879
message
: 
"Target class [Auth\\RegisterController] does not exist."

記事ではララベルのバージョンが6.9ですが、環境構築した際にLaravelのバージョンの指定をしていないので自分のでは8.75になりました。
ですので、記事と所々違う点があります。(Userモデルの配置や、Factoryの記述など)

今回出ているサーバーエラーもバージョンの違いによってコントローラーの参照の仕方が変わっているからでしょうか?

LaravelもVueも初心者すぎてあまりよく理解できていません。どなたかご教授いただければ幸いです。

0

1Answer

マニュアルを読んだだけですが、Laravelのバージョン7から8にバージョンアップするにあたってルーティングに変更があります。

一般的にコントローラーの名前空間はApp\Http\Controllers以下に配置され、バージョン7まではこの部分を省略することができます。
例えば、UserController@indexにするとプレフィックスが自動で付いてApp\Http\Controllers\UserController@indexとして扱われます。
しかし、バージョン8からはこのプレフィックスはデフォルトで機能しなくなったので、それ以前の省略記法ではエラーになると思われます。

これに該当する場合の解決方法は、アップグレードガイドに記載されている通り3つの方法があります。

  • callable記法
  • 完全な名前空間での文字列記法
  • 名前空間のプレフィクスを有効にする

このような変更を行った経緯として次のように説明されているので、callable記法にするのが良さそうです。

コントローラのルート宣言でPHP標準callable構文を使用できるようになり、多くのIDEでコントローラクラスへのジャンプがより良くサポートされます。

1Like

Comments

  1. @woodman0224

    Questioner

    コメントありがとうございます。
    apiのルーティングで指定しているコントローラーの表記を省略せずに入力したところエラー解消できました。根本的な知識がまだまだ足りないので、ドキュメントなど見るよう心がけます。
    改めて感謝いたします🙇‍♂️

Your answer might help someone💌