PHP Composer:在自动加载函数中设置动态变量路径

PHP Composer: Setting dynamic variable paths in the autoload function

我最近开始使用 composer 来自动加载我的 classes。但是我发现我必须单独上传每个目录,因为我为每个 class 存储了一个 src/ 目录和一个 tests/ 目录。例如:

  "Core\Router\": "system/Core/Router/src/",
  "Core\Router\Tests\": "system/Core/Router/tests/",
  "Core\DatabaseManager\": "system/Core/DatabaseManager/src/",
  "Core\DatabaseManager\Tests\": "system/Core/DatabaseManager/tests/"

有没有办法让作曲家读取可变路径?例如

  "Core\{VARIABLE_PATH}\": "system/Core/{VARIABLE_PATH}/src/",
  "Core\{VARIABLE_PATH}\Tests\": "system/Core/{VARIABLE_PATH}/tests/"

不,不支持 "dynamic paths"。 "component" 文件夹布局,其中 "src" 和 "tests" 位于子文件夹内绝对不错,但目前没有 "automatical" 对该结构的自动加载支持。

当您为 system/core/ 文件夹使用一个命名空间 "application\namespace" 时,所有 类 都会被扫描(包括 src 和测试)并成为自动加载映射的一部分。换句话说,自动加载会起作用,但考虑到生产用途时,您的地图会很大,因为它还包括测试 类。这可能会导致速度下降。如果您不关心这一点,那么一切都很好:当使用映射到顶级文件夹 \system\Core.

的单个 App\Namespace\Core 时,自动加载将正常工作

如果您关心,那么您可以尝试使用 autoloadautoload-dev 部分手动划分 srctests,并在顶部列出各个组件文件夹命名空间。这很乏味,但会导致生产类映射更小(无开发)。

您可以定义多个目录进行搜索,如下所示:

composer.json

{
    "autoload": {
        "psr-4": {
            "App\Namespace\": 
            [
                "ComponentOne/src", 
                "ComponentTwo/src"
            ]
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\Namespace\Tests": 
            [
                "ComponentOne/tests", 
                "ComponentTwo/tests"
            ]
        }
    }
}