¿Cuál es la nueva estructura de directorios de Symfony 3?

90

Acabo de crear un nuevo proyecto de Symfony 2.5 con un comando de compositor normal:

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

La Terminal me pregunta:

¿Le gustaría utilizar la estructura de directorios de Symfony 3?

¿Cuál es esta estructura de directorios de Symfony 3? Nunca lo había visto antes ... ¿Es nuevo desde 2.5?

¿Cuáles son los beneficios de usarlo?

¿Hay alguna forma de replicar esta estructura de directorios?

Ousmane
fuente
3
Tenga en cuenta que, mientras tanto, esta pregunta se ha eliminado del instalador porque estaba causando cierto grado de confusión entre los usuarios. Más información: github.com/symfony/symfony-standard/issues/674
Corneliu
@Corneliu lo ha hecho. Sin embargo, aún es posible desencadenar la pregunta estableciendo una variable de entorno antes de ejecutar Composer. Vea esta pregunta y respuesta que publiqué
Nic Wortel

Respuestas:

176

Quiero usar la nueva estructura de directorios de Symfony 3, pero no veo la pregunta.

La pregunta Would you like to use Symfony 3 directory structure?se eliminó al crear un nuevo proyecto debido a la confusión que causó. Puede forzar el uso de la estructura de directorios usando lo siguiente:

Si prefiere la nueva estructura, puede agregar la variable de entorno SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREa su .bashrco .bash_profileasí:

Hacer que todos los proyectos futuros soliciten la nueva estructura

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

Haga que SOLO ESTE proyecto pregunte si queremos usar la nueva estructura.

Si lo deseaba solo para un proyecto en particular (uno solo), puede usar:

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

Si la variable de entorno SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREestá configurada y configurada en true, composerle preguntará si desea usar la nueva estructura de directorio.

Continuar leyendo a continuación para todos los cambios entre el Symfony2y la Symfony3estructura de directorios.


¿Cuál es la nueva estructura de directorios de Symfony 3?

(y cómo me afecta a mí y a mi flujo de trabajo)

Investigué esto creando 2 proyectos, uno con symfony-2.5.0estructura de directorio, otro con symfony-3(solo cambio de estructura de directorio).

Haz uno de cada proyecto:

# 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

Así que ahora tenemos los 2 directorios diferentes que queremos comparar.


Encuentra la differencia

Puede diffentre los 2 directorios usando:

$ 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
*/

Esto muestra los archivos que difieren en las 2 versiones.


Desglose de diff

Aquí hay un desglose de todo en el diferencial.

# 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

Beneficios de la estructura de directorios de Symfony 3

La nueva estructura de directorio tiene una serie de beneficios, todos los cuales son menores y pueden requerir cambios mínimos en su flujo de trabajo.

PHPUnit

phpunit se puede ejecutar desde la raíz del proyecto sin tener que especificar explícitamente la ruta del archivo de configuración.

# Symfony2
phpunit -c app/phpunit.xml

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

Ejecutables binarios

Todos los archivos ejecutables binarios ahora están todos ubicados en una única ubicación: el bindirectorio (similar a un sistema operativo tipo 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

El nuevo /vardirectorio

El nuevo /vardirectorio contiene los archivos en los que el sistema escribe datos durante el curso de su funcionamiento (similar a un sistema operativo tipo Unix) .

Esto también hace que sea más fácil agregar permisos, todo el /vardirectorio debe ser escribible por su servidor web. Puede seguir la guía de Symfony2 para configurar permisos (sustituyendo app/cache&& app/logspor var), cualquier otro archivo que desee escribir localmente también se puede encontrar aquí.

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

Verificación de requisitos de Symfony

La ejecución symfony_requirementsgenerará configuraciones de entorno obligatorias y opcionales.
p.ej:

********************************
* '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)
'

Conclusión

Parece que Sensio Labs hizo un buen orden, todos los cambios anteriores tienen mucho sentido, deberían ser fáciles de implementar al actualizar de 2.5a 3.x, ¡estos probablemente serán el menor de tus problemas!

Leer los documentos

Symfony 2.x => 3.0 Actualice los documentos aquí
Symfony 3.0 La arquitectura

Fecha de lanzamiento de Symfony 3

Parece muy lejano mirar el proceso de lanzamiento (vale la pena leerlo) :

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

Proceso de lanzamiento actualizado de Symfony
(fuente: symfony.com )

Añil
fuente
Gracias por tu ayuda, sí, espero que la migración de 2. * a 3.0 sea posible y fácil.
Ousmane
Ahora creo que por qué el comando no funciona porque el compositor se movió de la aplicación al contenedor.
Parixit
1
A partir de ayer, eliminamos la pregunta sobre la estructura de directorios "3.0" porque confundía a la gente y todavía no hay ningún beneficio real de usar esta estructura. Aún falta mucho para la versión 3.0, pero cuando lleguemos allí, seguramente habrá detalles sobre cómo actualizar :).
weaverryan
1
@MarcelBurkhard He actualizado mi respuesta para mostrar cómo forzar la nueva estructura de directorio, simplemente agregue la variable de entorno SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(vea la parte superior de mi respuesta para obtener detalles completos)
Anil
1
Debe actualizar la respuesta y tener en cuenta que eliminaron esta opción del instalador.
Pinoniq
38

Aquí hay una lista de cambios entre la estructura de directorios nueva y antigua:

  • Se varintroduce una nueva carpeta
  • app/console se mueve a bin/console
  • app/check.php se mueve / renombra a bin/symfony_requirements
  • app/phpunit.xml.dist se mueve a la carpeta raíz
  • app/SymfonyRequirements.php se mueve a var/SymfonyRequirements.php
  • las carpetas app/cachey app/logsse han movido a var/cachey var/logs, respectivamente

(Actualmente, no todos los archivos antiguos parecen haberse eliminado, por lo que es posible que desee hacerlo manualmente antes de enviar todos los archivos al control de versiones. Consulte este problema ).

Entonces, ¿cuál es el beneficio?

Hay un par de beneficios con estos cambios. En primer lugar, todos los archivos y carpetas que deberían poder escribirse para Symfony ahora están en la varcarpeta. Esto debería facilitar la configuración de los permisos: simplemente asegúrese de tener acceso de escritura a la varcarpeta y listo. Esto se sugiere en esta publicación de blog ; todavía no lo he probado.

En segundo lugar, todos los ejecutables, incluidos console, están ahora en la bincarpeta. Eso permite a los usuarios de Bash, por ejemplo, agregar esto a su .profilearchivo:

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

Ahora ni siquiera tiene que escribir bin/consolemás, simplemente consoleserá suficiente (tenga en cuenta que tuve que reiniciar para que esto funcione).

También hay algunas otras mejoras. app/check.phpahora es un ejecutable, por lo que puede llamarlo usando en bin/symfony_requirementslugar de php app/check.php. (Usando el .profiletruco que describí anteriormente, simplemente symfony_requirementsserá suficiente también)

Y, por último, pero no menos importante, ya no tiene que especificar la ubicación del archivo de configuración cuando ejecuta PHPUnit. Entonces, en lugar de phpunit -c appsimplemente ejecutar phpunit.

¿Puedo actualizar los proyectos existentes a esta nueva estructura también?

De forma predeterminada, solo obtendrá la pregunta "¿Quiere usar la nueva estructura de directorio?" Cuando cree un nuevo proyecto (usando composer create-project symfony/framework-standard-edition path/ "2.5.*").

Sin embargo, es posible actualizar una aplicación Symfony existente, pero es una solución algo hacky. Ahora me las he arreglado para hacerlo con varias aplicaciones, y puede leer los pasos en esta esencia . Sin embargo, dado que no fue diseñado para esto, no puedo garantizar que siempre funcione.

Actualizar

Resulta que Symfony ya no te pregunta si quieres usar la nueva estructura de directorios al crear una nueva aplicación Symfony a través de Composer. Sin embargo, todavía es posible crear proyectos Symfony con la nueva estructura de directorios, usando una variable de entorno. Para obtener más información, consulte ¿Cómo puedo crear un nuevo proyecto Symfony con la nueva estructura de directorios?

Nic Wortel
fuente
6
No es necesario reiniciar después de cambiar su .profile, puede simplemente volver a obtener el archivo en su shell actual, o salir e iniciar un nuevo shell. La ejecución . ~/.profilevolverá a generar el archivo (tenga en cuenta el espacio de punto inicial).
Drarok