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();
}
}
?>