ポートフォリオ作成中にClass not foundエラーにつまづきました。
突破に時間を要してしまったので、対処方法を記載しておきます。
#エラー画面
CalendarViewが見つかりませんというエラー。
カレンダーを表示するコードを書いてあるCalendarView.phpというファイルを、表示する際に呼び出せずにエラーが出ている様子。
#確認したこと
####1.composer.jsonの確認
オートローダで対象となるディレクトリはcomposer.jsonで設定してあるため、それが間違っていないか確認する。
ちなみにオートローダとは、PHPでは別のファイルのプログラムを利用する際、requireなどでパスを指定して読み込む。
しかしLaravelはオートローダ機能があり、対象となるファイルが自動的に読み込まれる。
その対象となるディレクトリを設定してあるのがcomposer.jsonである。
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
autoloadの部分を確認します。
今回使用したいディレクトリが記載されているか確認します。
ちゃんと設定されていました。
####2.namespaceが間違っていないか
namespace App\Calendar;
use Carbon\Carbon;
ComposerはPSR-4という約束に従ってオートローダを実行しているらしい。
名前空間とファイル名にはその規則があり、間違っているとオートローダできない。
仕様に沿っているか確認する。(詳しくはこちらに記載ありました)
まずは名前空間とパスは一致しているかどうか。
今回はappの下のCalendarフォルダにCalendarView.phpを格納している。
大文字、小文字も間違っていないか確認。
どうやら合っている様子。
####3.composer dump-autoloadしてみる
クラスを変更したり、追加した時などにコンパイルされていない可能性があるため、dump-autoloadする必要があるらしい。
これをすることでファイルが読み込まれて、変更内容が読み込まれる。
$ composer dump-autoload
does not comply with psr-4 autoloading standardというエラーが出ています。
psr-4の仕様に沿っていないのでオートロードできていない様子。
しかし1で何度も確認したし、と思いエラーコードをよく見てみると・・
Class App\Calendar\CalendarView located in ./app/Calendar/ CalendarView.php does not comply with psr-4 autoloading standard. Skipping.
ファイル名の前に変な空白が・・・
#原因
ファイル名の先頭に空白が入っていました。
ファイル名を正しいものに修正して再度dump-autoloadしてみる。
エラー解消しました!
#わかったこと
クラス名やパスが間違っていないときは、コンパイルされていない可能性があるためcomposer dump-autoloadすることで解消されることがある。
しかしそれでもエラーが出る場合は、クラス名がパスが間違っていたり、命名規則に沿っていない可能性があるのでそこを確認する必要がある。