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
时,自动加载将正常工作
如果您关心,那么您可以尝试使用 autoload
和 autoload-dev
部分手动划分 src
和 tests
,并在顶部列出各个组件文件夹命名空间。这很乏味,但会导致生产类映射更小(无开发)。
您可以定义多个目录进行搜索,如下所示:
composer.json
{
"autoload": {
"psr-4": {
"App\Namespace\":
[
"ComponentOne/src",
"ComponentTwo/src"
]
}
},
"autoload-dev": {
"psr-4": {
"App\Namespace\Tests":
[
"ComponentOne/tests",
"ComponentTwo/tests"
]
}
}
}
我最近开始使用 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
时,自动加载将正常工作
如果您关心,那么您可以尝试使用 autoload
和 autoload-dev
部分手动划分 src
和 tests
,并在顶部列出各个组件文件夹命名空间。这很乏味,但会导致生产类映射更小(无开发)。
您可以定义多个目录进行搜索,如下所示:
composer.json
{
"autoload": {
"psr-4": {
"App\Namespace\":
[
"ComponentOne/src",
"ComponentTwo/src"
]
}
},
"autoload-dev": {
"psr-4": {
"App\Namespace\Tests":
[
"ComponentOne/tests",
"ComponentTwo/tests"
]
}
}
}