Laravel框架就像包,dump-autoload不起作用

时间:2014-01-08 00:55:40

标签: laravel package composer-php

对于我正在开发的项目,我想创建一个包含多个较小包的'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"
}

1 个答案:

答案 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。