web-dev-qa-db-fra.com

Nouvelle installation de Symfony 3: impossible d'ouvrir le fichier d'entrée: app / console dans composer install

J'ai installé une nouvelle instance de symfony3 via l'installateur officiel de symfony ( http://symfony.com/download ). Après avoir fait les premières choses, j'ai validé le projet sur Git et l'ai cloné l'autre jour sur un autre ordinateur. Après le clonage, j'ai lancé "composer install" pour installer toutes les dépendances de symfony. Maintenant vient le problème: le script ScriptHandler::clearCache s'arrête avec une erreur: Could not open input file: app/console. C'est vrai - symfony3 a une nouvelle structure de répertoire - donc le console réside maintenant dans /bin - pas dedans /app. Comment dire au compositeur/au projet d'utiliser la nouvelle structure au lieu de l'ancienne?

J'ai lu ici ( Quelle est la nouvelle structure de répertoires Symfony 3? ) à propos de la console-command SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true - mais cela ne fonctionne pas dans mon cas.

Des conseils?

22
cklm

ScriptHandler prend le dir de la clé de configuration supplémentaire dans le composer.json les noms de fichiers comme symfony-bin-dir. Vérifiez donc que le composer contient la clé de configuration correcte, comme exemple:

composer.json

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

ÉDITER:

Le problème était lié au cache du compositeur. Il a été résolu en l'effaçant avec la commande:

>php composer.phar clear-cache

J'espère que cela t'aides.

20
Matteo

Créez simplement le répertoire var. Après ça composer install et composer update fonctionnera bien.

Explication:

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']);
}

Vous avez donc besoin des deux pour avoir symfony-var-dir dans composer.json's extra et avoir ce répertoire existant.

43
luchaninov

J'ai rencontré le même problème. Le script utilise l'existence du répertoire var pour décider d'utiliser la nouvelle structure de répertoires ou l'ancienne. Si var existe, la nouvelle structure de répertoires est utilisée. Sinon, il utilise l'ancienne structure.

Le fichier .gitignore par défaut empêche à la fois le répertoire var et le répertoire bin d'être ajoutés à git.

Ce que j'ai fait pour résoudre le problème pour moi, c'est d'éditer .gitignore dans le répertoire du projet pour qu'il ressemble à ceci:

/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

Je ne prétends pas être un expert en .gitignore, donc je ne suis pas sûr que ce soit la manière la plus élégante de le faire, mais c'est ce qui a fonctionné pour moi.

9
Cory

J'ai eu le même problème:

[RuntimeException]
An error occurred when executing the ""cache:clear --no-warmup"" command:

Could not open input file: app/console

Mon fichier de console se trouve également dans le dossier/bin /, j'ai donc dû l'appeler depuis la racine du projet pour vider le cache chaque fois que je clone le projet depuis DevOps:

php bin/console cache:clear

Ensuite, je peux exécuter composer install et ça marche bien

0
Ivan Bosmansky