对于我正在从事的项目,我想创建一个包含多个较小包的'核心'包,就像laravel对它的框架所做的那样。文件夹结构是这样的,
Package1: gybrus/core/src/Gybrus/Package1
Package2: gybrus/core/src/Gybrus/Package1
在做了一些研究之后,我注意到如果我没记错的话,这可以通过作曲家来实现,但这也是它对我来说失败的地方。目前我有多个 composer.json 文件,但在运行"php artisan dump-autoload"命令后,类不会添加到自动加载文件中。因此,我想知道 Laravel 框架是否增加了一些额外的魔力来实现这一目标。
提前感谢!
这是我当前的设置,为了不宣传某些内容,我更改了包名称;)第一个作曲家文件位于"src"文件夹旁边的"核心"文件夹中。
{
"name": "gybrus/core",
"description": "The Core",
"keywords": ["core"],
"authors": [
{
"name": "Kevin Dierkx",
"email": "email@email.com"
}
],
"require": {
"php": ">=5.3.0",
"laravel/framework": "4.0.x"
},
"replace": {
"gybrus/package1": "self.version"
},
"require-dev": {
"mockery/mockery": "dev-master",
"phpunit/phpunit": "3.7.*"
},
"autoload": {
"psr-0": {
"Gybrus": "src/"
}
},
"minimum-stability": "dev"
}
第二个作曲家文件位于 package1 文件夹中:
{
"name": "gybrus/package1",
"authors": [
{
"name": "Gybrus",
"email": "email@email.com"
}
],
"require": {
"php": ">=5.3.0",
"illuminate/support": "4.0.x"
},
"autoload": {
"psr-0": {"Gybrus\Package1": ""}
},
"target-dir": "Gybrus/Package1",
"minimum-stability": "dev"
}
找到了我问题的原因!
第一个脚本告诉作曲家,它应该从"src"文件夹中开始自动加载命名空间"Gybrus",经过一些测试后,它可以按预期工作。上述设置中断的地方是以下行:
return Finder::create()->files()->in($workbench)->name('composer.json')->depth('< 3');
这会告诉 Finder 停止查找深度超过 2 个文件夹的 composer.json 文件。到目前为止,没有什么奇怪的。
哪里出了问题,我把工作台包符号链接到工作台文件夹中。这导致了一个奇怪的问题,即 composer.json 文件实际上比它们应该的更深,这导致停止加载 composer.json 文件并破坏这些包的自动加载。
一个快速的解决方法是不符号链接或从包内部运行作曲家安装。