Apa struktur direktori Symfony 3 yang baru?

90

Saya baru saja membuat proyek Symfony 2.5 baru dengan perintah komposer biasa:

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

Terminal bertanya kepada saya:

Apakah Anda ingin menggunakan struktur direktori Symfony 3?

Apa struktur direktori Symfony 3 ini? Saya belum pernah melihatnya sebelumnya ... Apakah ini baru sejak 2.5?

Apa keuntungan menggunakannya?

Apakah ada cara untuk mereplikasi struktur direktori ini?

Ousmane
sumber
3
Perhatikan bahwa sementara itu, pertanyaan ini telah dihapus dari penginstal karena menyebabkan kebingungan di antara pengguna. Info lebih lanjut: github.com/symfony/symfony-standard/issues/674
Corneliu
@Corneli itu memang. Namun, masih mungkin untuk memicu pertanyaan, dengan menyetel variabel lingkungan sebelum menjalankan Composer. Lihat pertanyaan dan jawaban yang saya posting ini: stackoverflow.com/q/24956881/1001110
Nic Wortel

Jawaban:

176

Saya ingin menggunakan struktur direktori Symfony 3 yang baru, tetapi saya tidak melihat pertanyaannya?

Pertanyaan Would you like to use Symfony 3 directory structure?tersebut telah dihapus saat membuat proyek baru karena kebingungan yang ditimbulkannya. Anda dapat memaksa penggunaan struktur direktori menggunakan berikut ini:

Jika Anda lebih suka struktur baru, Anda dapat menambahkan variabel lingkungan SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREke Anda .bashrcatau .bash_profileseperti ini:

Buat semua proyek masa depan meminta struktur baru

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

Buat HANYA proyek INI menanyakan apakah kita ingin menggunakan struktur baru.

Jika Anda menginginkannya hanya untuk proyek tertentu (satu kali), Anda dapat menggunakan:

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

Jika variabel lingkungan SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREdisetel dan disetel ke true, composerakan menanyakan apakah Anda ingin menggunakan struktur direktori baru.

Lanjutkan membaca di bawah untuk semua perubahan antara struktur direktori Symfony2dan Symfony3.


Apa struktur direktori Symfony 3 yang baru?

(dan bagaimana pengaruhnya terhadap saya & alur kerja saya)

Saya melihat ini dengan membuat 2 proyek, satu dengan symfony-2.5.0struktur direktori, satu dengan symfony-3(hanya perubahan struktur direktori).

Buat satu dari setiap proyek:

# 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

Jadi sekarang kami memiliki 2 direktori berbeda yang ingin kami bandingkan.


Temukan difference

Anda dapat memilih diffantara 2 direktori menggunakan:

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

Ini menunjukkan file yang berbeda di 2 versi.


Rincian diff

Berikut adalah rincian semua yang ada di 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

Manfaat struktur direktori Symfony 3

Struktur direktori baru memiliki sejumlah manfaat, yang semuanya kecil dan mungkin memerlukan sedikit perubahan pada alur kerja Anda.

PHPUnit

phpunit dapat dijalankan dari root proyek tanpa harus secara eksplisit menentukan jalur file konfigurasi.

# Symfony2
phpunit -c app/phpunit.xml

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

Biner Executable

Semua file biner yang dapat dieksekusi sekarang semuanya berada di satu lokasi - bindirektori (mirip dengan os mirip 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

/varDirektori baru

Direktori baru /varberisi file-file yang digunakan sistem untuk menulis data selama operasinya (mirip dengan os mirip unix) .

Ini juga mempermudah untuk menambahkan izin, seluruh /vardirektori harus dapat ditulis oleh server web Anda. Anda dapat mengikuti panduan Symfony2 untuk mengatur izin (menggantikan app/cache&& app/logsdengan var), file lain yang ingin Anda tulis secara lokal juga dapat ditemukan di sini.

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

Pemeriksaan persyaratan Symfony

Menjalankan symfony_requirementsakan menampilkan konfigurasi lingkungan wajib & opsional.
misalnya:

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

Kesimpulan

Sepertinya pembersihan yang bagus oleh Sensio Labs, semua perubahan di atas sangat masuk akal, mereka harus mudah diterapkan saat meningkatkan dari 2.5ke 3.x, ini mungkin masalah kecil Anda!

Baca dokumennya

Symfony 2.x => 3.0 Tingkatkan dokumen di sini
Symfony 3.0 Arsitektur

Tanggal rilis untuk Symfony 3

Tampaknya jauh dari melihat proses Rilis (layak dibaca) :

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

Proses rilis Symfony yang diperbarui
(sumber: symfony.com )

Anil
sumber
Terima kasih atas bantuan Anda, ya saya harap migrasi dari 2. * ke 3.0 akan mungkin dan mudah.
Ousmane
Sekarang saya berpikir mengapa perintah tidak berfungsi karena komposer pindah dari aplikasi ke bin.
Parixit
1
Sampai kemarin, kami telah menghapus pertanyaan struktur direktori "3.0" karena membingungkan orang dan belum ada manfaat nyata menggunakan struktur ini. 3.0 masih lama lagi, tapi sesampainya di sana pasti akan ada detail cara upgrade :).
weaverryan
1
@MarcelBurkhard Saya telah memperbarui jawaban saya untuk menunjukkan cara memaksa struktur direktori baru, Anda cukup menambahkan variabel lingkungan SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(lihat bagian atas jawaban saya untuk detail lengkap)
Anil
1
Anda harus memperbarui jawaban dan mencatat bahwa mereka menghapus opsi ini dari penginstal.
Pinoniq
38

Berikut adalah daftar perubahan antara struktur direktori lama dan baru:

  • varFolder baru diperkenalkan
  • app/console dipindahkan ke bin/console
  • app/check.php dipindahkan / diganti namanya menjadi bin/symfony_requirements
  • app/phpunit.xml.dist dipindahkan ke folder root
  • app/SymfonyRequirements.php dipindahkan ke var/SymfonyRequirements.php
  • yang app/cachedan app/logsfolder telah dipindahkan ke var/cachedan var/logsmasing-masing

(Saat ini tidak semua file lama tampaknya dihapus, jadi Anda mungkin ingin melakukannya secara manual sebelum memasukkan semua file ke kontrol versi. Lihat masalah ini )

Lalu apa manfaatnya?

Ada beberapa keuntungan dengan perubahan ini. Pertama-tama, semua file dan folder yang seharusnya dapat ditulis untuk Symfony sekarang ada di varfolder tersebut. Ini seharusnya membuat konfigurasi perizinan jauh lebih mudah: cukup pastikan akses tulis ke varfolder dan Anda selesai. Ini disarankan dalam posting blog ini - Saya belum mencobanya sendiri.

Kedua, semua file yang dapat dieksekusi, termasuk console, sekarang ada di dalam binfolder. Itu memungkinkan pengguna Bash misalnya untuk menambahkan ini ke .profilefile mereka :

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

Sekarang Anda bahkan tidak perlu mengetik bin/consolelagi, consolecukup (perhatikan bahwa saya harus reboot agar ini berfungsi).

Ada beberapa perbaikan lainnya juga. app/check.phpsekarang dapat dieksekusi, sehingga Anda dapat menyebutnya menggunakan bin/symfony_requirementsbukan php app/check.php. (Menggunakan .profiletrik yang saya jelaskan sebelumnya, symfony_requirementscukup juga)

Dan, yang tak kalah pentingnya, Anda tidak lagi harus menentukan lokasi file konfigurasi saat menjalankan PHPUnit. Jadi, alih-alih phpunit -c appAnda cukup mengeksekusi phpunit.

Dapatkah saya meningkatkan proyek yang sudah ada ke struktur baru ini juga?

Secara default, Anda hanya akan mendapatkan pertanyaan 'Apakah Anda ingin menggunakan struktur direktori baru' saat membuat proyek baru (menggunakan composer create-project symfony/framework-standard-edition path/ "2.5.*").

Namun, dimungkinkan untuk meningkatkan aplikasi Symfony yang sudah ada, tetapi ini adalah solusi yang agak hacky. Saya telah berhasil melakukannya dengan sejumlah aplikasi sekarang, dan Anda dapat membaca langkah-langkah dalam inti ini . Namun, karena tidak dirancang untuk ini, saya tidak dapat menjamin itu akan selalu berfungsi.

Memperbarui

Ternyata Symfony tidak lagi menanyakan apakah Anda ingin menggunakan struktur direktori baru, saat membuat aplikasi Symfony baru melalui Composer. Namun, masih mungkin untuk membuat proyek Symfony dengan struktur direktori baru, dengan menggunakan variabel lingkungan. Untuk informasi lebih lanjut, lihat Bagaimana cara membuat proyek Symfony baru dengan struktur direktori baru?

Nic Wortel
sumber
6
Anda tidak perlu melakukan boot ulang setelah mengubah Anda .profile, Anda dapat membuat sumber ulang file di shell Anda saat ini, atau keluar dan memulai shell baru. Berjalan . ~/.profileakan mengambil kembali file tersebut (perhatikan spasi-titik di depannya).
Drarok