tutorial instalar español ejemplos symfony

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 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/cache y app/logs se han movido a var/cache y var/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?