【发布时间】:2022-01-22 20:56:18
【问题描述】:
我对 composer.json 的自动加载部分有疑问。
鉴于: 我有很多模块,位于 {projectRoot}/app/code/VendorName 或 vendor/vendor-name 示例:
app/code/VendorName/ModuleACore
app/code/VendorName/ModuleBCore
app/code/VendorName/ModuleBAddon
app/code/VendorName/ModuleBSubModuleA
app/code/VendorName/ModuleBSubModuleB
app/code/VendorName/ModuleBSubModuleC
app/code/VendorName/ModuleCCore
app/code/VendorName/ModuleCAddon
app/code/VendorName/ModuleCSubModuleA
app/code/VendorName/ModuleCSubModuleB
app/code/VendorName/ModuleCSubModuleC
等等。我无法将这些模块合并为一个,因为它是一个巨大的可扩展的东西。客户可以安装几个模块来满足他们的需要,如果他们需要一些额外的功能——他们可以通过安装子模块来扩展解决方案。所以,它无法合并...
每个模块都有自己的 composer.json,如下所示:
{
"name": "vendor-name/module-name",
...
"autoload": {
...
"psr-4": {
"VendorName\\ModuleName\\": ""
}
}
}
另外,它们都可以安装在 {projectRoot}/vendor/vendor-name/*
那么有没有办法用每个模块的 composer.json 文件来构建这样的树:
app
code
VendorName
ModuleA
ModuleACore
ModuleB
ModuleBCore
ModuleBAddon
ModuleBSubModules
ModuleBSubModuleA
ModuleBSubModuleB
ModuleBSubModuleC
ModuleC
ModuleCCore
ModuleCAddon
ModuleCSubModules
ModuleCSubModuleA
ModuleCSubModuleB
ModuleCSubModuleC
我在 google 中找到的只是 autoload 部分的 psr-4,但它只指定了包文件夹内的包文件的路径。喜欢
"VendorName\\ModuleName\\": "src/" // -> app/code/VendorName/ModuleName/src/*
// or vendor/vendor-name/module-name/src/*
但我需要在 VendorName 和 ModuleName 之间指定一部分路径,并且我需要它适用于两种安装方式:在项目源 (app/code/) 或供应商 (vendor/) 中
我发誓我在一个供应商代码中看到了它,但我不记得他们是如何做到的......
Sowwy 有点模糊的例子,但 NDA :(C
【问题讨论】:
-
这完全违背了命名空间的意义,因为如果您只是将自动加载设置为用户实际应用程序代码的一部分,那么您就有可能超过 覆盖 用户代码。不要混合用户路径和供应商路径。
标签: php composer-php psr-4