instalar - ¿Cuál es la nueva estructura de directorios de Symfony 3?
symfony 4 tutorial español (2)
Acabo de crear un nuevo proyecto Symfony 2.5 con un comando de compositor habitual:
php composer.phar create-project symfony/framework-standard-edition path/ 2.5.0
La Terminal me pregunta:
¿Le gustaría usar la estructura de directorios de Symfony 3?
¿Qué es esta estructura de directorio 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 directorio?
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 ha eliminado al crear un nuevo proyecto debido a la confusión que causó. Puede forzar el uso de la estructura del directorio usando lo siguiente:
Si prefiere la nueva estructura, puede agregar la variable de entorno SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE
a su .bashrc
o .bash_profile
manera:
Haga 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 SÓLO ESTE proyecto pregunte si queremos usar la nueva estructura.
Si solo lo desea 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_STRUCTURE
está configurada y configurada en true
, el composer
le preguntará si desea utilizar la nueva estructura de directorios.
Continúe leyendo a continuación para ver todos los cambios entre la estructura de directorios Symfony2
y Symfony3
.
¿Cuál es la nueva estructura de directorios de Symfony 3?
(y cómo nos afecta a mí y a mi flujo de trabajo)
Analicé esto creando 2 proyectos, uno con estructura de directorios symfony-2.5.0
, uno con symfony-3
(solo cambio de estructura de directorios).
Haga 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
Entonces ahora tenemos los 2 directorios diferentes que queremos comparar.
Encuentra la diff
Puede diff
entre 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 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
Beneficios de la estructura de directorios Symfony 3
La nueva estructura de directorios tiene una serie de beneficios, todos de menor importancia y que 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 ubicados en una sola ubicación: el directorio bin
(similar a un sistema operativo 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 directorio nuevo /var
El directorio nuevo /var
contiene los archivos a los que el sistema escribe datos durante el curso de su operación (similar a un sistema operativo unix) .
Esto también hace que sea más fácil agregar permisos, el directorio completo /var
debe poder ser escrito por su servidor web. Puede seguir la guía de Symfony2 para establecer permisos (sustituyendo app/cache
&& app/logs
con var
), también puede encontrar aquí cualquier otro archivo que desee escribir localmente.
# default symfony3 `var` directory
var/bootstrap.php.cache
var/cache
var/logs
Comprobación de requisitos de Symfony
La ejecución de symfony_requirements
producirá 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 una buena solución por parte de Sensio Labs, todos los cambios anteriores tienen mucho sentido, deberían ser fáciles de implementar al actualizar de 2.5
a 3.x
, ¡estos probablemente serán los menos problemáticos!
Lea los documentos
Symfony 2.x => 3.0 Actualiza documentos aquí
Symfony 3.0 La arquitectura
Fecha de lanzamiento de Symfony 3
Se ve lejos mirando el proceso de lanzamiento (vale la pena leerlo) :
http://symfony.com/doc/current/contributing/community/releases.html
Aquí hay una lista de cambios entre la estructura de directorios antigua y nueva:
- Se presenta una nueva carpeta
var
-
app/console
se mueve abin/console
-
app/check.php
se mueve / renombra abin/symfony_requirements
-
app/phpunit.xml.dist
se mueve a la carpeta raíz -
app/SymfonyRequirements.php
se mueve avar/SymfonyRequirements.php
- las carpetas
app/cache
yapp/logs
se han movido avar/cache
yvar/logs
, respectivamente
(Actualmente, no todos los archivos antiguos parecen eliminarse, 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. Antes que nada, todos los archivos y carpetas que deberían poder escribirse para Symfony ahora están en la carpeta var
. Esto debería facilitar enormemente los permisos de configuración: simplemente asegúrate de tener acceso de escritura a la carpeta var
y listo. Esto se sugiere en esta publicación de blog : aún no lo he probado.
En segundo lugar, todos los ejecutables, incluida la console
, ahora están en la carpeta bin
. Eso permite a los usuarios de Bash, por ejemplo, agregar esto a su archivo .profile
:
# set PATH so it includes current bin folder
PATH="./bin:$PATH"
Ahora ni siquiera tiene que escribir bin/console
nunca más, simplemente la console
será suficiente (tenga en cuenta que tuve que reiniciar para que esto funcione).
Hay algunas otras mejoras también. app/check.php
ahora es un ejecutable, por lo que puede llamarlo utilizando bin/symfony_requirements
lugar de php app/check.php
. (Usando el truco .profile
que describí anteriormente, simplemente los symfony_requirements
serán suficientes 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 la phpunit -c app
puedes simplemente ejecutar phpunit
.
¿Puedo actualizar proyectos existentes a esta nueva estructura también?
De forma predeterminada, solo obtendrá la pregunta "¿Desea utilizar la nueva estructura de directorios?" Al crear un nuevo proyecto (utilizando el 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. He logrado hacerlo con varias aplicaciones ahora, y puedes leer los pasos en este sentido . Sin embargo, como no fue diseñado para esto, no puedo garantizar que funcione siempre.
Actualizar
Resulta que Symfony ya no le pregunta si desea usar la nueva estructura de directorios cuando crea una nueva aplicación Symfony a través de Composer. Sin embargo, aún es posible crear proyectos de Symfony con la nueva estructura de directorios, mediante el uso de una variable de entorno. Para obtener más información, consulte ¿Cómo puedo crear un nuevo proyecto de Symfony con la nueva estructura de directorios?