Ошибка 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.
Я немного новичок, когда дело доходит до композитора, так что любая помощь будет очень признательна!
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.'
);
В вашем проекте нет ничего плохого, это просто ошибка в стандартной версии. Пока вы правильно загружаете классы, с вами все в порядке.