Ошибка Symfony 2.6 после использования composer: "Необходимо установить библиотеки поставщиков"


После создания или обновления проекта Symfony 2.6.1 с помощью composer я получаю ошибку "Библиотеки поставщиков должны быть установлены" , и она предлагает запустить php composer.phar install для их установки.

Точные шаги, которые я предпринимаю: -

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

Похоже, что это работает без каких-либо проблем, и, насколько я могу судить, загружает все необходимые пакеты поставщиков. Однако, если я затем запущу:-

php app/check.php

Это приводит к:-

* Должны быть установлены библиотеки поставщиков
  > Поставщик библиотеки отсутствуют. Установите composer следующим образом
  > инструкции от http://getcomposer.org /. Затем запустите "php
  > composer.phar установить", чтобы установить их.

Я пробовал бежать composer update, composer install, удаление кэша композитора, но ничто из того, что я пробовал до сих пор, не устраняет эту ошибку.

При тестировании многочисленных версий Symfony я получаю эту ошибку со всеми версиями Symfony>=2.5.0. Любой проект, который я создаю таким же образом, используя Symfony <=2.4.8, работает просто хорошо.

Я использую PHP 5.6.4 (установленный через MacPorts) в OS X.

Я немного новичок, когда дело доходит до композитора, так что любая помощь будет очень признательна!

Author: monkeyhybrid, 2015-01-02

1 answers

Этот вопрос находится здесь:

/**
 * 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. Вполне вероятно, что он уже находится в очереди на исправление, но вы также можете поднять его на Гитхаб.

ИЗМЕНИТЬ:

Похоже, что у них уже есть, 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.'
);

В вашем проекте нет ничего плохого, это просто ошибка в стандартной версии. Пока вы правильно загружаете классы, с вами все в порядке.

 5
Author: Flosculus, 2015-01-02 16:29:20