Quelle est la nouvelle structure de répertoires Symfony 3?

90

Je viens de créer un nouveau projet Symfony 2.5 avec une commande de composition classique:

php composer.phar create-project symfony/framework-standard-edition path/ 2.5.0

Le Terminal me demande:

Souhaitez-vous utiliser la structure de répertoires Symfony 3?

Quelle est cette structure de répertoires Symfony 3? Je ne l'ai jamais vu auparavant ... Est-ce nouveau depuis 2.5?

Quels sont les avantages à l'utiliser?

Existe-t-il un moyen de répliquer cette structure de répertoires?

Ousmane
la source
3
Notez que dans l'intervalle, cette question a été supprimée du programme d'installation car elle provoquait une certaine confusion parmi les utilisateurs. Plus d'infos: github.com/symfony/symfony-standard/issues/674
Corneliu
@Corneliu en effet. Cependant, il est toujours possible de déclencher la question, en définissant une variable d'environnement avant d'exécuter Composer. Voir cette question et réponse que j'ai postée: stackoverflow.com/q/24956881/1001110
Nic Wortel

Réponses:

176

Je souhaite utiliser la nouvelle structure de répertoires Symfony 3, mais je ne vois pas la question?

La question Would you like to use Symfony 3 directory structure?a été supprimée lors de la création d'un nouveau projet en raison de la confusion qu'elle provoquait. Vous pouvez forcer l'utilisation de la structure de répertoires en utilisant ce qui suit:

Si vous préférez la nouvelle structure, vous pouvez ajouter la variable d'environnement SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREà votre .bashrcou .bash_profilesimilaire:

Faire en sorte que tous les futurs projets demandent la nouvelle structure

# .bash_profile
# ALL new composer installs will ask `Would you like to use the new Symfony3 strucure?`
export SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true

Demandez SEULEMENT CE projet si nous voulons utiliser la nouvelle structure.

Si vous le vouliez pour un projet particulier uniquement (un seul), vous pouvez utiliser:

SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true composer create-project symfony/framework-standard-edition path/ "2.5.*"

Si la variable d'environnement SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREest définie et définie sur true, composervous demandera si vous souhaitez utiliser la nouvelle structure de répertoires.

Continuez à lire ci-dessous pour tous les changements entre la structure de répertoires Symfony2et Symfony3.


Quelle est la nouvelle structure de répertoires Symfony 3?

(et comment cela m'affecte et mon flux de travail)

J'ai examiné cela en créant 2 projets, un avec une symfony-2.5.0structure de répertoire, un avec symfony-3(changement de structure de répertoire uniquement).

Faites un de chaque projet:

# say `N` to `Would you like to use Symfony 3 directory structure?`
$ composer create-project symfony/framework-standard-edition symfony-2.5.0/ 2.5.0

# say `Y` to `Would you like to use Symfony 3 directory structure?`
$ composer create-project symfony/framework-standard-edition symfony-3/ 2.5.0

Nous avons donc maintenant les 2 répertoires différents que nous voulons comparer.


Trouvez l' différence

Vous pouvez diffentre les 2 répertoires en utilisant:

$ diff -rq symfony-2.5.0/ symfony-3/
/** (Returned from the diff)
Files symfony-2.5.0/.gitignore and symfony-3/.gitignore differ
Files symfony-2.5.0/.travis.yml and symfony-3/.travis.yml differ
Only in symfony-2.5.0/app: bootstrap.php.cache
Only in symfony-2.5.0/app: cache
Only in symfony-2.5.0/app: console
Only in symfony-2.5.0/app: logs
Only in symfony-2.5.0/app: phpunit.xml.dist
Only in symfony-3/bin: console
Only in symfony-3/bin: symfony_requirements
Files symfony-2.5.0/composer.json and symfony-3/composer.json differ
Only in symfony-3/: phpunit.xml.dist
Only in symfony-3/: var
Files symfony-2.5.0/vendor/autoload.php and symfony-3/vendor/autoload.php differ
Files symfony-2.5.0/vendor/composer/autoload_real.php and symfony-3/vendor/composer/autoload_real.php differ
Files symfony-2.5.0/web/app.php and symfony-3/web/app.php differ
Files symfony-2.5.0/web/app_dev.php and symfony-3/web/app_dev.php differ
*/

Cela montre les fichiers qui diffèrent dans les 2 versions.


Panne de diff

Voici une ventilation de tout dans le diff.

# These files still exist in both versions (with different content)
.gitignore
.travis.yml
composer.json
vendor/autoload.php
vendor/composer/autoload_real.php
web/app.php
web/app_dev.php

# The following files have been removed from 2.5.0
# {RemovedFile2.5}      |  {ReplacedWith3.0}
app/cache               |  var/cache
app/logs                |  var/log
app/bootstrap.php.cache |  var/bootstrap.php.cache
app/console             |  bin/console
app/phpunit.xml.dist    |  phpunit.xml.dist

# The following files are new in 3.0
bin/symfony_requirements # run via CLI

Avantages de la structure de répertoires Symfony 3

La nouvelle structure de répertoires présente un certain nombre d'avantages, qui sont tous mineurs et peuvent nécessiter des modifications minimes de votre flux de travail.

PHPUnit

phpunit peut être exécuté à partir de la racine du projet sans avoir à spécifier explicitement le chemin du fichier de configuration.

# Symfony2
phpunit -c app/phpunit.xml

# Symfony3 (no need to specify the configuration file location)
phpunit

Exécutables binaires

Tous les fichiers exécutables binaires sont désormais tous situés dans un seul emplacement - le binrépertoire (similaire à un système d'exploitation de type Unix) .

# you can update your `PATH` to include the `bin` directory
PATH="./bin:$PATH"

# From your project root you can now run executables like so:
console
symfony_requirements
doctrine

# else with no `PATH` update
bin/console
bin/symfony_requirements
bin/doctrine

Le nouveau /varrépertoire

Le nouveau /varrépertoire contient les fichiers dans lesquels le système écrit des données au cours de son fonctionnement (similaire à un système d'exploitation de type Unix) .

Cela facilite également l'ajout d'autorisations, le /varrépertoire entier doit être accessible en écriture par votre serveur Web. Vous pouvez suivre le guide Symfony2 pour définir les autorisations (en remplaçant app/cache&& app/logspar var), tous les autres fichiers que vous souhaitez écrire localement peuvent également se trouver ici.

# default symfony3 `var` directory
var/bootstrap.php.cache
var/cache
var/logs

Vérification des exigences Symfony

L'exécution symfony_requirementsproduira des configurations d'environnement obligatoires et facultatives.
par exemple:

********************************
* 'Symfony requirements check' *
********************************

* Configuration file used by PHP: /usr/local/php5/lib/php.ini

/** ATTENTION **
*  The PHP CLI can use a different php.ini file
*  than the one used with your web server.
*  To be on the safe side, please also launch the requirements check
*  from your web server using the web/config.php script.
*/

** Mandatory requirements **
'
 OK       PHP version must be at least 5.3.3 (5.5.11 installed)
 OK       PHP version must not be 5.3.16 as Symfony wont work properly with it
 OK       Vendor libraries must be installed
 OK       var/cache/ directory must be writable
 OK       var/logs/ directory must be writable
 OK       date.timezone setting must be set
 OK       Configured default timezone "Europe/London" must be supported by your installation of PHP
 OK       json_encode() must be available
 OK       session_start() must be available
 OK       ctype_alpha() must be available
 OK       token_get_all() must be available
 OK       simplexml_import_dom() must be available
 OK       APC version must be at least 3.1.13 when using PHP 5.4
 OK       detect_unicode must be disabled in php.ini
 OK       xdebug.show_exception_trace must be disabled in php.ini
 OK       xdebug.scream must be disabled in php.ini
 OK       PCRE extension must be available
'
** Optional recommendations **
'
 OK       xdebug.max_nesting_level should be above 100 in php.ini
 OK       Requirements file should be up-to-date
 OK       You should use at least PHP 5.3.4 due to PHP bug #52083 in earlier versions
 OK       When using annotations you should have at least PHP 5.3.8 due to PHP bug #55156
 OK       You should not use PHP 5.4.0 due to the PHP bug #61453
 OK       When using the logout handler from the Symfony Security Component, you should have at least PHP 5.4.11 due to PHP bug #63379 (as a workaround, you can also set invalidate_session to false in the security logout handler configuration)
 OK       You should use PHP 5.3.18+ or PHP 5.4.8+ to always get nice error messages for fatal errors in the development environment due to PHP bug #61767/#60909
 OK       PCRE extension should be at least version 8.0 (8.34 installed)
 OK       PHP-XML module should be installed
 OK       mb_strlen() should be available
 OK       iconv() should be available
 OK       utf8_decode() should be available
 OK       posix_isatty() should be available
 OK       intl extension should be available
 OK       intl extension should be correctly configured
 OK       intl ICU version should be at least 4+
 OK       a PHP accelerator should be installed
 OK       short_open_tag should be disabled in php.ini
 OK       magic_quotes_gpc should be disabled in php.ini
 OK       register_globals should be disabled in php.ini
 OK       session.auto_start should be disabled in php.ini
 OK       PDO should be installed
 OK       PDO should have some drivers installed (currently available: mysql, sqlite, dblib, pgsql)
'

Conclusion

Cela semble être un bon rangement par Sensio Labs, tous les changements ci-dessus ont un sens parfait, ils devraient être faciles à mettre en œuvre lors de la mise à niveau de 2.5vers 3.x, ce seront probablement le moindre de vos problèmes!

Lire la documentation

Symfony 2.x => 3.0 Mise à jour de la documentation ici
Symfony 3.0 L'architecture

Date de sortie de Symfony 3

Il semble loin de regarder le processus de publication (qui vaut la peine d'être lu) :

http://symfony.com/doc/current/contributing/community/releases.html

Mise à jour du processus de publication de Symfony
(source: symfony.com )

Anil
la source
Merci pour votre aide, oui j'espère que la migration de 2. * vers 3.0 sera possible et facile.
Ousmane le
Maintenant, je pense que pourquoi la commande ne fonctionne pas parce que le compositeur est passé de l'application à la corbeille.
Parixit
1
Depuis hier, nous avons supprimé la question de la structure de répertoire "3.0" car elle déroutait les gens et il n'y a pas encore de réel avantage à utiliser cette structure. 3.0 est encore loin, mais quand nous y arriverons, il y aura certainement des détails sur la façon de mettre à jour :).
weaverryan
1
@MarcelBurkhard J'ai mis à jour ma réponse pour montrer comment forcer la nouvelle structure de répertoire, il vous suffit d'ajouter la variable d'environnement SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(voir le haut de ma réponse pour plus de détails)
Anil
1
Vous devez mettre à jour la réponse et noter qu'ils ont supprimé cette option du programme d'installation.
Pinoniq
38

Voici une liste des changements entre l'ancienne et la nouvelle structure de répertoires:

  • Un nouveau vardossier est introduit
  • app/console est déplacé vers bin/console
  • app/check.php est déplacé / renommé en bin/symfony_requirements
  • app/phpunit.xml.dist est déplacé vers le dossier racine
  • app/SymfonyRequirements.php est déplacé vers var/SymfonyRequirements.php
  • les dossiers app/cacheet app/logsont été déplacés vers var/cacheet var/logs, respectivement

(Actuellement, tous les anciens fichiers ne semblent pas être supprimés, vous pouvez donc le faire manuellement avant de valider tous les fichiers dans le contrôle de version. Consultez ce problème )

Alors quel est l'avantage?

Ces changements présentent quelques avantages. Tout d'abord, tous les fichiers et dossiers qui devraient être accessibles en écriture pour Symfony se trouvent maintenant dans le vardossier. Cela devrait rendre la configuration des autorisations beaucoup plus facile: assurez simplement l'accès en écriture au vardossier et vous avez terminé. Ceci est suggéré dans ce billet de blog - je n'ai pas encore essayé cela moi-même.

Deuxièmement, tous les exécutables, y compris console, se trouvent maintenant dans le bindossier. Cela permet aux utilisateurs de Bash par exemple d'ajouter ceci à leur .profilefichier:

# set PATH so it includes current bin folder
PATH="./bin:$PATH"

Maintenant, vous n'avez même plus besoin de taper bin/console, consolecela suffira simplement (notez que j'ai dû redémarrer pour que cela fonctionne).

Il y a également d'autres améliorations. app/check.phpest maintenant un exécutable, vous pouvez donc l'appeler en utilisant bin/symfony_requirementsau lieu de php app/check.php. (En utilisant l' .profileastuce que j'ai décrite précédemment, symfony_requirementscela suffira également)

Et, last but not least, vous n'avez plus à spécifier l'emplacement du fichier de configuration lors de l'exécution de PHPUnit. Donc au lieu de phpunit -c appvous pouvez simplement exécuter phpunit.

Puis-je également mettre à niveau des projets existants vers cette nouvelle structure?

Par défaut, vous n'obtiendrez que la question «Voulez-vous utiliser la nouvelle structure de répertoire» lors de la création d'un nouveau projet (en utilisant composer create-project symfony/framework-standard-edition path/ "2.5.*").

Cependant, il est possible de mettre à niveau une application Symfony existante, mais c'est une solution quelque peu piratée. J'ai réussi à le faire avec un certain nombre d'applications maintenant, et vous pouvez lire les étapes dans cet essentiel . Cependant, comme il n'a pas été conçu pour cela, je ne peux pas garantir que cela fonctionnera toujours.

Mettre à jour

Il s'avère que Symfony ne vous demande plus si vous souhaitez utiliser la nouvelle structure de répertoires, lors de la création d'une nouvelle application Symfony via Composer. Cependant, il est toujours possible de créer des projets Symfony avec la nouvelle structure de répertoires, en utilisant une variable d'environnement. Pour plus d'informations, consultez Comment créer un nouveau projet Symfony avec la nouvelle structure de répertoires?

Nic Wortel
la source
6
Vous n'avez pas besoin de redémarrer après avoir changé votre .profile, vous pouvez simplement ressourcer le fichier dans votre shell actuel, ou quitter et démarrer un nouveau shell. En cours d'exécution . ~/.profile, le fichier sera ré-source (notez le point-espace).
Drarok