【问题标题】:use PHPExcel with composer and Symfony2.2将 PHPExcel 与 composer 和 Symfony2.2 一起使用
【发布时间】:2013-04-24 16:02:32
【问题描述】:

我在 SO 上找到了这个:How to use PHPExcel correctly with Symfony 2

这可行,但我想将它与作曲家一起使用。 我已经解决的第一部分:为特殊标签加载 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、类映射、不同的路径、相对于项目/供应商/phpexcel、每次更新作曲家,但没有任何效果。

只有在我输入这条线时才有效

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

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

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

【问题讨论】:

    标签: symfony phpexcel autoload composer-php symfony-2.2


    【解决方案1】:

    关于你的主要问题,问题是一旦安装了包,如果你更新定义并添加自动加载的东西,那么运行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''' 只是说可以在这个目录中找到任何命名空间。这意味着自动加载器将始终扫描此目录以查找类,这比将命名空间显式映射到目录更方便但速度较慢。所以两者都有效,但更具体的形式是首选,尤其是在您公开发布的包中。

    【讨论】:

    • will reinstall it with the latest information from your composer.json, including autoload, etc. 是什么意思?如何为没有自己的 composer.json 和命名空间的 PHPExcel 包含/启用自动加载?
    • 正如我所说,一旦你这样做了,你必须先删除 vendor/PHPOffice 然后运行更新,强制它重新安装包。
    • 您可能过度设计了问题/解决方案。我使用的是:“CodePlex/PHPExcel”:“1.7.8”,在要求下。无需 PHPOffice 或包条目或自动加载下的任何内容。
    • “PHPExcel”包的命名已更新,您必须在 composer.json 中使用"phpoffice/phpexcel"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2017-12-23
    • 2017-11-28
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多