PHP にて composer dump-autoload がうまくいかず Class not found になった時の対応

PHP のフレームワークで見る composer コマンド

自分の作ったクラスファイルを名前空間とディレクトリを合わせることによって、
どこでも use で簡単にクラスを呼べるようになる。

$ bin/composer dump-autoload -o

が、下記エラーが起きて、
クラスが全て not found になった。

$ bin/composer dump-autoload -o

Generating optimized autoload files
Class Src\Usecase\UserInteractor located in ./src/usecase/UserInteractor.php
does not comply with psr-4 autoloading standard. Skipping.
...同様の Skipping が全ファイル分出た

大文字小文字が原因

原因がサーバーの設定なのか、
composer の仕様なのか、
psr-4 の基準なのか、
わからないけど、

ローカル環境で問題なく、本番環境でエラーが出たあたり、もはや意味がわからないけど、
とりあえずディレクトリ名、ファイル名を大文字小文字含めて合わせないといけなかったらしい。

git で大文字小文字の違いも管理したい時

サンプル

  • src は composer.json 参照
  • ディレクトリ名合わせる

composer.json

必要そうな箇所だけ抜粋

{
    ...
    "autoload-dev": {
        "psr-4": {
            "Src\\": "src/",
            ...
        }
    },
	...
}

src/Usecase/UserInteractor.php

ディレクトリ名変更 usecase → Usecase

<?php

namespace Src\Usecase;

class UserInteractor {
	...
}
?>

使う方

<?php

namespace Src\Interfaces\Controllers;

use Src\Usecase\UserInteractor;

class SampleController {
	
	public $user = null;

	public function __construct() {
		$this->user = new UserInteractor();
	}
}
?>