0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[PHP] 「Fatal error: Class ‘…’ not found」に陥ったときのチェック項目

Posted at

さっきまで快適に作業してたのに、ちょっとファイルいじったら Class not found になったんです!

というときの対処方法です。

基本のチェック

まずは以下の記事からの抜粋です。

vendor/autoload.phpをrequireしているか?

「さっきまで動いてたんです :joy:」 → 該当せず

composer.jsonにautoloadの定義を忘れていないか?

「さっきまで動いてたんです :joy:」 → 該当せず

vendor/composer/autoload_*.phpの内容が最新になっているか?

以下のコマンドを実行……

$ composer dump-autoload

……解決せず

スペルミスは無いか?

「クラス名変えてません :joy:」 → 該当せず

いま作業しているディレクトリは実行環境のものか?

「さすがに大丈夫っす :joy:」 → 該当せず

さらなるチェック

さらに以下の記事からの抜粋です。

PSR-4 のパスが正しいか?

以下のコマンドを実行……

$ php -r '$a=require "vendor/autoload.php";echo json_encode($a->getPrefixesPsr4(), JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);'

……該当ネームスペースのパスは正しい :joy: → 該当せず

autloaderが正しいファイルを見つけられているか?

以下のコマンドを実行……

$ php -r '$a=require "vendor/autoload.php";echo json_encode($a->findFile("App\\Application"));'

"App\\Application"のところは、あなたの見つからないクラス名に書き換えてください。

……出力されたパスは正しい :joy: → 該当せず

Composerにパッケージの最適化をしてもらう

これをすると、PSR-4 非準拠のディレクトリ階層でも、クラスを見つけてくれるようになるそうです。

以下のコマンドを実行……

$ composer dump-autoload --optimize
Generating optimized autoload files
Class App\Appelication located in ./src/Application.php does not comply with psr-4 autoloading standard. Skipping.
Generated optimized autoload files containing 3808 classes

……んん :interrobang: :interrobang: :interrobang:

Class App\Appelication located in ./src/Application.php does not comply with psr-4 autoloading standard. Skipping.
これ :point_up: なに :interrobang:

名前空間とディレクトリ階層がマッチしているか?

PSR-4のことはよくわかりませんが、名前空間とディレクトリ階層がマッチしている必要があるそうです。

composer.json に次のように定義されていたとき

    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    },

App\Controller\MyController クラスを置く場所は

:ok: OKパターン :ng: NGパターン
クラスを置く場所 src/Controller src/Controller 以外

となります。

……なんですけれど、これは該当しないですね。

基本に戻ってチェック!

納得いかない問題のとき、えてして原因は単純なものなのです。

いま作業しているディレクトリは実行環境のものか?

大丈夫!autoloaderが出力するパスも期待通り!

スペルミスは無いか?

git diffしてみました……

-class Application extends BaseApplication
+class Appelication extends BaseApplication implements AuthenticationServiceProviderInterface

……んん :interrobang:

いつの間にか指が滑っていたようです :flushed: :flushed: :flushed:

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?