【问题标题】:Symfony 2.6 error after using composer: "Vendor libraries must be installed"使用 composer 后 Symfony 2.6 错误:“必须安装供应商库”
【发布时间】:2015-02-28 22:39:28
【问题描述】:

使用 composer 创建或更新 Symfony 2.6.1 项目后,我收到 “必须安装供应商库” 错误,它建议运行 php composer.phar install 来安装它们。

我正在采取的具体步骤:-

composer create-project symfony/framework-standard-edition my_new_project/
cd my_new_project

这似乎运行没有任何问题,据我所知,确实下载了所有必要的供应商包。但是,如果我然后运行:-

php app/check.php

这会导致:-

* 必须安装供应商库
> 缺少供应商库。在下面安装作曲家
> 来自http://getcomposer.org/ 的说明。然后运行“php
> composer.phar install" 来安装它们。

我试过运行composer updatecomposer install,删除作曲家缓存,但到目前为止我没有尝试解决这个错误。

通过测试多个 Symfony 版本,我在所有版本的 Symfony >= 2.5.0 中都收到此错误。我使用 Symfony

我在 OS X 上运行 PHP 5.6.4(通过 MacPorts 安装)。

对于作曲家我有点菜鸟,所以任何帮助都将不胜感激!

【问题讨论】:

  • 这个问题已经在 Symfony 2.6.3 版本中得到修复。

标签: php symfony composer-php symfony-2.6


【解决方案1】:

这个问题在这里:

/**
 * In some special setups, the vendor/ directory isn't located in the project's
 * root directory. To make this command work for every case, read Composer's
 * vendor/ directory location directly from composer.json file.
 *
 * @return string
 */
private function getComposerVendorDir()
{
    $composerJson = json_decode(file_get_contents(__DIR__.'/../composer.json'));
    if (isset($composerJson->config)) {
        return $composerJson->config->{'vendor-dir'};
    }

    return __DIR__.'/../vendor/composer';
}

具体来说:

return $composerJson->config->{'vendor-dir'};

isset($composerJson->config) 上的条件返回 true,从而导致上述语句。但是,当您查看生成的 composer.json 时:

"config": {
    "bin-dir": "bin"
},

vendor-dir 丢失。生成通知:

PHP Notice:  Undefined property: stdClass::$vendor-dir

因此函数返回null,所以这个要求不成立:

$this->addRequirement(
    is_dir($this->getComposerVendorDir()), // <-- HERE
    'Vendor libraries must be installed',
    'Vendor libraries are missing. Install composer following instructions from <a href="http://getcomposer.org/">http://getcomposer.org/</a>. '.
        'Then run "<strong>php composer.phar install</strong>" to install them.'
);

这是symfony/symfony-standard 上的一个错误。它很可能已经在等待修复,但你不妨在 Github 上提出它。

编辑:

看起来他们已经有了,2.7 用途:

$this->addRequirement(
    is_dir(__DIR__.'/../vendor/composer'),
    'Vendor libraries must be installed',
    'Vendor libraries are missing. Install composer following instructions from <a href="http://getcomposer.org/">http://getcomposer.org/</a>. '.
    'Then run "<strong>php composer.phar install</strong>" to install them.'
);

您的项目没有任何问题,它只是标准版中的一个错误。只要您正确地自动加载类就可以了。

【讨论】:

  • 感谢您提供如此翔实和详细的回答!我很高兴能确认我的项目实际上没问题。在网络上没有看到更多关于这个问题的报告,我有点惊讶,但很高兴知道它看起来会在即将发布的 2.7 版本中得到解决。干杯!
  • Np。请注意,标准版在技术上不是 Symfony2 的一部分。当您开始自定义应用程序的结构时,它提出的任何要求都很容易被打破。创建项目时,您不会获得 GIT 存储库的副本,因此您对项目甚至需求所做的任何更改都是您自己的。
  • 我在composer.json 中的"bin-dir": "bin", 下面添加了行"vendor-dir": "vendor" 并检查通过。
  • 我无法让它与上述答案和 cmets 一起工作,但这个成功了:stackoverflow.com/questions/27748135/…
猜你喜欢
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多