LoginSignup
25
26

More than 3 years have passed since last update.

phpのautoloadでclassの読み込みができないとき

Last updated at Posted at 2018-08-24

phpのautoloadでclassが読み込めない

新しいプロジェクトにアサインして、環境構築を行っていたとき、以下のようなエラーが出現。


Callable Myapp\Controller\Hogehoge does not exist

クラスがないというエラーと思いコンソールでもphpを直接実行。

PHP Fatal error:  Uncaught Error: Class 'Myapp\Controller\Hogehoge' not found in var/www/html/index.php:4

やはりクラスが認識出来ずにエラーになっている。

エラーになっているクラスは、autoloadをcomposerで設定しているためcomposerのアップデートをかける。


// composer.json すべてのアップデート
$ composer update
// autoload 関連ファイルの更新のみ
$ composer dumpautoload

しかし状況は改善せず・・・

composerの設定を確認

以下のコマンドでcomposerのロード先フォルダをダンプする。


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

実行すると以下のような結果となる。

{
    "Myapp\": [
        "/var/www/html/vendor/composer/../../src/myapp"
    ]
}

上記が表示されていたら、composerの設定の更新は出来てそうだ。
スペルミス等の凡ミスは要チェック。

composerの設定は出来ていそうなので、autoloader側からクラスを使えるか確認。


$autoloader = require "vendor/autoload.php";
$result = $autoloader->findFile('Myapp\Controller\Hogehoge');
echo json_encode($result);
exit;

実行結果はfalse
本来は以下のような結果で取得できる。

\/var\/www\/html\/vendor\/composer\/..\/..\/src\/Myapp\/Controller\/Hogehoge.php"

最適化をcomposerに行って貰う

ここまで問題を切り分けたが解決できなかった場合は、composerに最適化を行ってもらう。(最終手段)


$ composer dump-autoload --optimize

とりあえず動作を確認できました。

参考サイト!!

Composerのautoloaderの最適化の仕様について - 開発ブログ
[PHP]ComposerでAutoload出来ない時の確認方法 - akamist blog
「Fatal error: Class ‘…’ not found」に陥ったときのチェック5項目 - Qiita

25
26
2

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
25
26