在我看来,Sergiy's 答案应该是给定问题的选定答案。我正在分享我的理解。
我正在寻找使用我在下面给出的 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 中的用户类 -
namespace OrgName\AppType\AppName\Controller\Provider; // namespace declaration
use OrgName\AppType\AppName\Controller\Provider\User; // when using the class
还要注意 "src/App"、"src/Test" .. 来自您的 web-root,即您的 composer.json 所在的位置。
与供应商目录无关。看看 vendor/autoload.php
现在,如果 composer 安装正确,所有需要的就是
#composer 更新
在作曲家更新我的类后成功加载。
我观察到的是 composer 在 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'),
);
这就是作曲家的映射方式。
对于 psr-0 映射在 vendor/composer/autoload_classmap.php 中