Новая установка 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, поэтому я не уверен, что это самый элегантный способ сделать это, но это то, что сработало для меня.