PSR-4自动加载不适用于从父目录声明的类

时间:2018-07-13 22:13:06

标签: composer-php

在我的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文件夹)。我的坏事:)

1 个答案:

答案 0 :(得分:1)

如果您的名称空间与目录名称匹配,则应定义如下自动加载规则:

"autoload": {
    "psr-4": {
        "Application\\": "../source/Application/",
        "ACME\\": "source/"
    }
}

在您的情况下,Application名称空间位于acme-testbed/source/Application中,因此您需要直接指向它。