私の意見では、Sergiy の回答は、特定の質問に対して選択された回答である必要があります。私の理解を共有しています。
以下に示すdir構造の下にあるcomposerを使用して、パッケージファイルを自動ロードしようとしていました。
<web-root>
|--------src/
| |--------App/
| |
| |--------Test/
|
|---------library/
|
|---------vendor/
| |
| |---------composer/
| | |---------autoload_psr4.php
| |
| |----------autoload.php
|
|-----------composer.json
|
psr-4オートローディング仕様を使用しています。
プロジェクトの composer.json に以下の行を追加する必要がありました。クラスファイルを src/App 、 src/Test 、およびライブラリディレクトリ内に配置する予定です。
"autoload": {
"psr-4": {
"OrgName\\AppType\\AppName\\": ["src/App", "src/Test", "library/"]
}
}
これはほとんど自明です。OrgName\AppType\AppNameは、意図した名前空間プレフィックスです。たとえば、src/App/Controller/Provider/User.phpのクラス User の場合-
namespace OrgName\AppType\AppName\Controller\Provider; // namespace declaration
use OrgName\AppType\AppName\Controller\Provider\User; // when using the class
また、「src/App」、「src/Test」.. は、composer.json がある Web ルートからのものであることに注意してください。ベンダーディレクトリとは何の関係もありません。vendor/autoload.php を見てください。
composer が適切にインストールされている場合、必要なのは
#composer update だけです
composer update 後、クラスが正常にロードされました。私が観察したのは、作曲家が vendor/composer/autoload_psr4.php に行を追加していることです
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
'OrgName\\AppType\\AppName\\' => array($baseDir . '/src/App', $baseDir . '/src/Test', $baseDir . '/library'),
);
これが composer マップの方法です。psr-0 のマッピングは vendor/composer/autoload_classmap.php にあります