在我的composer.json文件中,有以下用于PSR-4自动加载的声明:
"autoload": {
"psr-4": {
"Application\\": "../source/",
"ACME\\": "source/"
}
}
我的目录结构如下:
acme-testbed/
framework/
source/
Interfaces/
Helpers/
I18N.php
Helpers/
I18N.php
composer.json
source/
Interfaces/
Modules/
Frontend.php
Modules/
Frontend.php
这样,我可以做类似\ACME\Helpers\I18N::getLanguages()
或\Application\Modules\Frontend::setLanguage("es")
的事情(我确实会使用别名来做I18N::getLanguages()
或Frontend::setLanguage("es")
,但这只是出于说明目的)。
我遇到的问题是我的应用程序在ACME命名空间下找到了每个类,但在应用程序中却找不到。如您所见,ACME名称空间的每个声明都在framework
文件夹内(与composer.json文件相同),但是Application名称空间的每个声明都位于应用程序根目录(即其父目录)中。>
如何调整composer.json文件,以便同时使用两个命名空间声明?
编辑#1:刚刚意识到我显示了错误的文件夹结构(“应用程序”命名空间声明没有Application
文件夹)。我的坏事:)
答案 0 :(得分:1)
如果您的名称空间与目录名称匹配,则应定义如下自动加载规则:
"autoload": {
"psr-4": {
"Application\\": "../source/Application/",
"ACME\\": "source/"
}
}
在您的情况下,Application
名称空间位于acme-testbed/source/Application
中,因此您需要直接指向它。