5

使用 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 update, composer install,删除作曲家缓存,但到目前为止我没有尝试解决这个错误。

通过测试多个 Symfony 版本,我在 Symfony >= 2.5.0 的所有版本中都遇到了这个错误。我使用 Symfony <= 2.4.8 以相同方式创建的任何项目都可以正常工作。

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

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

4

1 回答 1

5

这个问题在这里:

/**
 * 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'};

条件 onisset($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.'
);

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

于 2015-01-02T16:29:20.673 回答