使用composer后出现Symfony 2.6错误:"必须安装供应商库"

mon*_*rid 5 php symfony composer-php symfony-2.6

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

我正在采取的确切步骤: -

composer create-project symfony/framework-standard-edition my_new_project/
cd my_new_project
Run Code Online (Sandbox Code Playgroud)

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

php app/check.php
Run Code Online (Sandbox Code Playgroud)

这导致: -

*必须安装
  供应商库>缺少供应商库.
  按照http://getcomposer.org/中的说明安装composer .然后运行"php
  > composer.phar install"来安装它们.

我已经尝试运行composer update,composer install删除了作曲家缓存,但到目前为止我没有尝试过任何东西来解决这个错误.

从测试Symfony的众多版本开始,我在所有版本的Symfony> = 2.5.0时出现此错误.我使用Symfony <= 2.4.8以相同方式创建的任何项目都可以正常工作.

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

当谈到作曲家时,我有点像菜鸟,所以任何帮助都会非常感激!

Flo*_*lus 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';
}
Run Code Online (Sandbox Code Playgroud)

特别:

return $composerJson->config->{'vendor-dir'};
Run Code Online (Sandbox Code Playgroud)

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

"config": {
    "bin-dir": "bin"
},
Run Code Online (Sandbox Code Playgroud)

vendor-dir缺失.生成通知:

PHP Notice:  Undefined property: stdClass::$vendor-dir
Run Code Online (Sandbox Code Playgroud)

因此该函数返回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.'
);
Run Code Online (Sandbox Code Playgroud)

这是一个错误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.'
);
Run Code Online (Sandbox Code Playgroud)

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

  • 我添加了行`"vendor-dir":"vendor"`下面的"bin-dir":"bin",```composer.json`并检查通过. (3认同)