Qual è la nuova struttura di directory di Symfony 3?

Ho appena creato un nuovo progetto Symfony 2.5 con un normale comando compositore:

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

Il terminale mi chiede:

Vorresti utilizzare la struttura di directory di Symfony 3?

Cos’è questa struttura di directory di Symfony 3? Non l’ho mai visto prima … È nuovo dal 2.5?

Quali sono i vantaggi nell’utilizzarlo?

C’è un modo per replicare questa struttura di directory?

Voglio usare la nuova struttura di directory di Symfony 3, ma non vedo la domanda?

La domanda Would you like to use Symfony 3 directory structure? è stato rimosso durante la creazione di un nuovo progetto a causa della confusione causata. È ansible forzare l’utilizzo della struttura di directory utilizzando quanto segue:

Se preferisci la nuova struttura, puoi aggiungere la variabile di ambiente SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE al tuo .bashrc o .bash_profile modo:

Fai in modo che tutti i progetti futuri richiedano la nuova struttura

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

Fai SOLO QUESTO progetto chiedi se vogliamo usare la nuova struttura.

Se lo volevi per un particolare progetto (uno solo), puoi usare:

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

Se la variabile di ambiente SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE è impostata e impostata su true , il composer chiederà se si desidera utilizzare la nuova struttura di directory.

Continua a leggere sotto per tutte le modifiche tra la struttura della directory Symfony2 e Symfony3 .


Qual è la nuova struttura di directory di Symfony 3?

(e come funziona me e il mio stream di lavoro)

Ho esaminato questo creando 2 progetti, uno con struttura di directory di symfony-2.5.0 , uno con symfony-3 (solo modifica della struttura di directory).

Crea uno di ciascun progetto:

 # 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 

Quindi ora abbiamo le 2 diverse directory che vogliamo confrontare.


Trova la differenza

È ansible diff tra le 2 directory utilizzando:

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

Questo mostra i file che differiscono nelle 2 versioni.


Ripartizione di diff

Ecco una ripartizione di tutto nella differenza.

 # 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 

Vantaggi della struttura di directory di Symfony 3

La nuova struttura di directory ha una serie di vantaggi, che sono tutti minori e possono richiedere modifiche minime al stream di lavoro.

PHPUnit

phpunit può essere eseguito dalla radice del progetto senza dover specificare esplicitamente il percorso del file di configurazione.

 # Symfony2 phpunit -c app/phpunit.xml # Symfony3 (no need to specify the configuration file location) phpunit 

Eseguibili binari

Tutti i file binari eseguibili ora si trovano tutti in un’unica posizione: la directory bin (simile 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 

La nuova directory /var

La nuova directory /var contiene i file a cui il sistema scrive i dati nel corso della sua operazione (simile a un sistema operativo unix) .

Ciò facilita anche l’aggiunta delle autorizzazioni, l’intera directory /var dovrebbe essere scrivibile dal server web. Puoi seguire la guida di Symfony2 per impostare i permessi (sostituendo app/cache && app/logs con var ), qualsiasi altro file che vuoi scrivere localmente potrebbe anche essere localizzato qui.

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

Verifica dei requisiti di symfony

L’esecuzione di symfony_requirements produrrà configurazioni di ambiente obbligatorie e opzionali.
per esempio:

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

Conclusione

Sembra un buon ordine di Sensio Labs, tutte le modifiche di cui sopra hanno perfettamente senso, dovrebbero essere facili da implementare durante l’aggiornamento da 2.5 a 3.x , questi saranno probabilmente l’ultimo dei tuoi problemi!

Leggi i documenti

Symfony 2.x => 3.0 Aggiorna i documenti qui
Symfony 3.0 L’architettura

Data di rilascio per Symfony 3

Sembra lontano guardando il processo di rilascio (vale la pena leggere) :

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

Processo di rilascio di Symfony aggiornato

Ecco un elenco di modifiche tra la vecchia e la nuova struttura di directory:

  • Viene introdotta una nuova cartella var
  • app/console viene spostata su bin/console
  • app/check.php viene spostato / rinominato in bin/symfony_requirements
  • app/phpunit.xml.dist viene spostato nella cartella principale
  • app/SymfonyRequirements.php viene spostato in var/SymfonyRequirements.php
  • le cartelle app/cache e app/logs sono state spostate rispettivamente in var/cache e var/logs

(Attualmente non tutti i vecchi file sembrano essere rimossi, quindi potresti voler farlo manualmente prima di commettere tutti i file nel controllo di versione.

Quindi qual è il vantaggio?

Ci sono un paio di vantaggi con questi cambiamenti. Prima di tutto, tutti i file e le cartelle che dovrebbero essere scrivibili per Symfony ora si trovano nella cartella var . Questo dovrebbe rendere molto più semplice la configurazione delle autorizzazioni: assicurati semplicemente l’accesso in scrittura alla cartella var e il gioco è fatto. Questo è suggerito in questo post del blog – Non ho ancora provato questo da solo.

In secondo luogo, tutti gli eseguibili, inclusa la console , sono ora nella cartella bin . Ciò consente agli utenti di Bash, ad esempio, di aggiungere questo al proprio file .profile :

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

Ora non devi più digitare bin/console , basterà semplicemente la console (nota che ho dovuto riavviare per far funzionare tutto ciò).

Ci sono anche altri miglioramenti. app/check.php è ora un eseguibile, quindi puoi chiamarlo usando bin/symfony_requirements invece di php app/check.php . (Usando il trucco .profile ho descritto in precedenza, semplicemente symfony_requirements sarà sufficiente)

E, ultimo ma non meno importante, non è più necessario specificare la posizione del file di configurazione quando si esegue PHPUnit. Quindi invece di phpunit -c app puoi semplicemente eseguire phpunit .

Posso aggiornare anche i progetti esistenti a questa nuova struttura?

Per impostazione predefinita, viene visualizzata solo la domanda “Volete utilizzare la nuova struttura di directory” quando si crea un nuovo progetto (utilizzando il composer create-project symfony/framework-standard-edition path/ "2.5.*" ).

Tuttavia, è ansible aggiornare un’applicazione Symfony esistente, ma è una soluzione un po ‘hacky. Sono riuscito a farlo con un numero di applicazioni ora, e puoi leggere i passaggi in questo senso . Tuttavia, poiché non è stato progettato per questo, non posso garantire che funzionerà sempre.

Aggiornare

Si scopre che Symfony non ti chiede più se vuoi usare la nuova struttura di directory, quando crei una nuova applicazione Symfony tramite Composer. Tuttavia, è ancora ansible creare progetti Symfony con la nuova struttura di directory, utilizzando una variabile di ambiente. Per maggiori informazioni, vedi Come posso creare un nuovo progetto Symfony con la nuova struttura di directory?