Qual è la nuova struttura delle directory di Symfony 3?


90

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

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

Il terminale mi chiede:

Vorresti usare la struttura delle directory di Symfony 3?

Cos'è questa struttura di directory di Symfony 3? Non l'ho mai visto prima ... È nuovo dalla 2.5?

Quali sono i vantaggi nell'usarlo?

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


3
Notare che nel frattempo questa domanda è stata rimossa dall'installer perché causava un certo grado di confusione tra gli utenti. Maggiori informazioni: github.com/symfony/symfony-standard/issues/674
Corneliu

@Corneliu lo ha davvero. Tuttavia, è ancora possibile attivare la domanda, impostando una variabile di ambiente prima di eseguire Composer. Vedere questa domanda e risposta che ho postato: stackoverflow.com/q/24956881/1001110
Nic Wortel

Risposte:


176

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?è stata rimossa durante la creazione di un nuovo progetto a causa della confusione che causava. È possibile forzare l'uso della struttura delle directory utilizzando quanto segue:

Se preferisci la nuova struttura, puoi aggiungere la variabile d'ambiente SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREal tuo .bashrco in questo .bash_profilemodo:

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 utilizzare la nuova struttura.

Se lo volevi solo per un progetto particolare (uno fuori servizio), puoi utilizzare:

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

Se la variabile d'ambiente SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREè impostata e impostata su true, composerti chiederà se vuoi usare la nuova struttura di directory.

Continua a leggere di seguito per tutte le modifiche tra la struttura della directory Symfony2e Symfony3.


Qual è la nuova struttura delle directory di Symfony 3?

(e come influisce su me e sul mio flusso di lavoro)

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

Crea uno di ogni 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 l' differezione

Puoi scegliere difftra 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 nel 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

Vantaggi della struttura delle directory di Symfony 3

La nuova struttura della directory offre numerosi vantaggi, tutti minori e potrebbero richiedere modifiche minime al flusso 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 eseguibili binari ora si trovano tutti in un'unica posizione: la bindirectory (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 /vardirectory

La nuova /vardirectory contiene i file in cui il sistema scrive i dati durante il corso del suo funzionamento (simile a un sistema operativo unix-like) .

Questo semplifica anche l'aggiunta di autorizzazioni, l'intera /vardirectory dovrebbe essere scrivibile dal tuo server web. Puoi seguire la guida di Symfony2 per impostare i permessi (sostituendo app/cache&& app/logscon var), qualsiasi altro file che desideri scrivere localmente potrebbe trovarsi qui.

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

Verifica dei requisiti di Symfony

L'esecuzione symfony_requirementsprodurrà configurazioni dell'ambiente obbligatorie e facoltative.
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 riassetto da parte di Sensio Labs, tutte le modifiche di cui sopra hanno perfettamente senso, dovrebbero essere facili da implementare durante l'aggiornamento da 2.5a 3.x, questi saranno probabilmente l'ultimo dei tuoi problemi!

Leggi i documenti

Symfony 2.x => 3.0 Aggiorna qui la documentazione
Symfony 3.0 L'architettura

Data di rilascio per Symfony 3

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

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

Aggiornato il processo di rilascio di Symfony
(fonte: symfony.com )


Grazie per il vostro aiuto, sì, spero che la migrazione da 2. * a 3.0 sarà possibile e facile.
Ousmane

Ora penso che sia il motivo per cui il comando non funziona perché il compositore è passato dall'app al cestino.
Parixit

1
Da ieri, abbiamo rimosso la domanda sulla struttura delle directory "3.0" perché confondeva le persone e non c'è ancora alcun vantaggio nell'usare questa struttura. La versione 3.0 è ancora lontana, ma quando ci arriveremo, ci saranno sicuramente dettagli su come eseguire l'aggiornamento :).
weaverryan

1
@MarcelBurkhard Ho aggiornato la mia risposta per mostrare come forzare la nuova struttura della directory, aggiungi semplicemente la variabile d'ambiente SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(guarda la parte superiore della mia risposta per tutti i dettagli)
Anil

1
Dovresti aggiornare la risposta e notare che hanno rimosso questa opzione dal programma di installazione.
Pinoniq

38

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

  • Viene introdotta una nuova varcartella
  • app/console viene spostato in 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
  • l' app/cachee app/logscartelle sono stati spostati var/cachee var/logs, rispettivamente,

(Attualmente non tutti i vecchi file sembrano essere stati rimossi, quindi potresti volerlo fare manualmente prima di salvare tutti i file nel controllo della versione. Vedi questo problema )

Allora qual è il vantaggio?

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

In secondo luogo, tutti gli eseguibili, inclusi console, sono ora nella bincartella. Ciò consente agli utenti di Bash, ad esempio, di aggiungere questo al loro .profilefile:

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

Ora non devi nemmeno bin/consolepiù digitare , semplicemente consolesarà sufficiente (nota che ho dovuto riavviare per far funzionare questo).

Ci sono anche altri miglioramenti. app/check.phpè ora un eseguibile, quindi puoi chiamarlo usando bin/symfony_requirementsinvece di php app/check.php. (Usando il .profiletrucco che ho descritto prima, semplicemente symfony_requirementssarà sufficiente)

E, ultimo ma non meno importante, non è più necessario specificare la posizione del file di configurazione durante l'esecuzione di PHPUnit. Quindi invece di phpunit -c appte puoi semplicemente eseguire phpunit.

Posso aggiornare anche i progetti esistenti a questa nuova struttura?

Per impostazione predefinita, riceverai solo la domanda "Vuoi usare la nuova struttura della directory" quando crei un nuovo progetto (utilizzando composer create-project symfony/framework-standard-edition path/ "2.5.*").

Tuttavia, è possibile aggiornare un'applicazione Symfony esistente, ma è una soluzione un po 'hacker. Sono riuscito a farlo con una serie di applicazioni ora e puoi leggere i passaggi in questa sintesi . 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 possibile creare progetti Symfony con la nuova struttura di directory, utilizzando una variabile d'ambiente. Per maggiori informazioni, vedere Come posso creare un nuovo progetto Symfony con la nuova struttura di directory?


6
Non è necessario riavviare dopo aver modificato il proprio .profile, è possibile semplicemente re-source il file nella shell corrente o uscire e avviare una nuova shell. L'esecuzione . ~/.profileripristinerà il file (notare lo spazio punto iniziale).
Drarok
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.