对于我正在开发的项目,我想创建一个包含多个较小包的'Core'包,就像laravel用它的框架一样。 文件夹结构将是这样的,
Package1: gybrus/core/src/Gybrus/Package1
Package2: gybrus/core/src/Gybrus/Package1
在做了一些研究后,我注意到如果我没有弄错的话,这可以通过作曲家实现,但这也是我打破的地方。 目前我有多个composer.json文件,但在运行'php artisan dump-autoload'命令后,这些类不会添加到自动加载文件中。 因此,我想知道Laravel框架是否会增加一些额外的魔力来实现这一目标。
提前致谢!
这是我目前的设置,为了不做广告,我改变了包名;) 第一个作曲家文件位于'src'文件夹旁边的'core'文件夹中。
{
"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"
}
答案 0 :(得分:0)
找到问题的原因!
第一个脚本告诉编写器它应该在'src'文件夹中自动加载命名空间'Gybrus',经过一些测试后它按预期工作。 上述设置中断的位置如下:
return Finder::create()->files()->in($workbench)->name('composer.json')->depth('< 3');
这告诉Finder停止查找比2个文件夹更深的composer.json文件。 到目前为止没什么奇怪的。
这里出错了,我将工作台包符号链接到workbench文件夹中。 这导致了一个奇怪的问题,即composer.json文件实际上比它们应该更深,这样就会停止加载composer.json文件并破坏这些软件包的自动加载。
快速解决方法是不要在包内进行符号链接或运行composer install。