像包这样的Laravel框架,转储自动加载不起作用



对于我正在从事的项目,我想创建一个包含多个较小包的'核心'包,就像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 文件并破坏这些包的自动加载。

一个快速的解决方法是不符号链接或从包内部运行作曲家安装。

相关内容

  • 没有找到相关文章

最新更新