4

我在 SO 上找到了这个:如何在 Symfony 2 中正确使用 PHPExcel

这可行,但我想将它与作曲家一起使用。我已经解决的第一部分:为特殊标签加载 PHPExcel(最后一个稳定版本)

我不知道如何使用以下语法获取标签:

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/umpirsky/SyliusAssortmentBundle"
    }
]

所以我使用了Package符号:
我发现,reference应该是 github 上的标签名称。并且version不能是相同的值(PHPExcel_1.7.8)。似乎不允许使用字母字符,所以它只是作为数字的版本(1.7.8)

"repositories": [{
    "type": "package",
    "package": {
        "name": "PHPOffice/PHPExcel",
        "version": "1.7.8",
        "source": {
            "url": "https://github.com/PHPOffice/PHPExcel.git",
            "type": "git",
            "reference": "PHPExcel_1.7.8"
        }
    }
}]

下一步我没有解决。我尝试了自动加载的每种组合:psr-0、classmap、不同的路径、相对于项目/供应商/phpexcel、每次更新作曲家,但没有任何效果。

它只有效,如果我把这条线

$loader->add('PHPExcel', __DIR__.'/../vendor/PHPOffice/PHPExcel/Classes');

进入 app/autoload.php。我发现,第一个字符串 ( PHPExcel) 也可以是一个空字符串:''. 如果我使用or
有区别吗?PHPExcel''

所以我的主要问题是,如何避免将这一行写入 autoload.php,将等效命令放入项目的 composer.json 中?

4

1 回答 1

8

关于你的主要问题,问题是一旦安装了包,如果你更新定义并添加自动加载的东西,那么运行composer update不会改变任何东西。Composer 仍然有已安装在其“缓存”中的旧包,因此它使用它来生成自动加载并且失败。

要解决此问题,您应该vendor/PHPOffice/PHPExcel直接删除并运行composer update,这将使用 composer.json 中的最新信息重新安装它,包括自动加载等。您应该指定自动加载:

"repositories": [{
    "type": "package",
    "package": {
        "name": "PHPOffice/PHPExcel",
        "version": "1.8.0",
        "source": {
            "url": "https://github.com/PHPOffice/PHPExcel.git",
            "type": "git",
            "reference": "1.8.0"
        },
        "autoload": {
            "psr-0": {
                "PHPExcel": "Classes/"
            }
        }
    }
}],
"require": {
    "PHPOffice/PHPExcel": "1.8.*",
    ...

关于第二个问题和''vs 'PHPExcel'''只是说可以在此目录中找到任何命名空间。这意味着自动加载器将始终扫描此目录以查找类,这比将命名空间显式映射到目录更方便但速度较慢。所以两者都有效,但更具体的形式是首选,尤其是在您公开发布的包中。

于 2013-04-24T16:23:35.093 回答