Новая установка Symfony 3: не удалось открыть входной файл: приложение/консоль в установке композитора

Я установил новый symfony3-экземпляр через официальный symfony-installer (http://symfony.com/download). Сделав первые шаги, я выполнил проект до Git и клонировал его на другой день на другом компьютере. После клонирования я запускал "компоновщик установки" для установки всех зависимостей symfony. Теперь возникает проблема: script ScriptHandler::clearCache останавливается с ошибкой: Could not open input file: app/console. Правильно - symfony3 имеет новую структуру каталогов - поэтому console теперь находится в /bin - не в /app. Как я могу сказать композитору/проекту использовать новую структуру вместо старой?

Я читаю здесь (Что представляет собой новая структура каталогов Symfony 3?) о консольной команде SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true - но это не работает в моем случае.

Любые советы?

Ответы

Ответ 1

ScriptHandler возьмите директорию из дополнительного ключа конфигурации в именах файлов composer.json как symfony-bin-dir. Поэтому убедитесь, что композитор содержит правильный ключ конфигурации, например:

composer.json

....
"extra": {
    "symfony-app-dir": "app",
    "symfony-bin-dir": "bin",
    "symfony-var-dir": "var",
    ....

EDIT:

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

>php composer.phar clear-cache

Надеемся на эту помощь

Ответ 2

Просто создайте каталог var. После этого composer install и composer update будут работать нормально.

Объяснение:

vendor/sensio/distribution-bundle/Composer/ScriptHandler.php:462

protected static function useNewDirectoryStructure(array $options)
{
    return isset($options['symfony-var-dir']) && is_dir($options['symfony-var-dir']);
}

Итак, вам нужно иметь symfony-var-dir в composer.json extra и иметь этот каталог.

Ответ 3

Я столкнулся с той же проблемой. script использует существование каталога var для принятия решения о том, следует ли использовать новую структуру каталогов или старую. Если var существует, используется новая структура каталогов. В противном случае он использует старую структуру.

Файл .gitignore по умолчанию предотвращает добавление каталога var и каталога bin в git.

Что я сделал, чтобы решить эту проблему для меня, было отредактировать .gitignore в каталоге проекта, чтобы она выглядела так:

/app/config/parameters.yml
/bin/*
/build/
/composer.phar
/vendor/
/web/bundles/
/var/*
!var/cache
/var/cache/*
!var/cache/.gitkeep
!var/logs
/var/logs/*
!var/logs/.gitkeep
!var/sessions
/var/sessions/*
!var/sessions/.gitkeep
!bin/console
!bin/symfony_requirements
/phpunit.xml

Я не претендую на роль эксперта по .gitignore, поэтому я не уверен, что это самый элегантный способ сделать это, но это то, что сработало для меня.