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?
Jawaban:
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_STRUCTURE
ke Anda.bashrc
atau.bash_profile
seperti 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_STRUCTURE
disetel dan disetel ketrue
,composer
akan menanyakan apakah Anda ingin menggunakan struktur direktori baru.Lanjutkan membaca di bawah untuk semua perubahan antara struktur direktori
Symfony2
danSymfony3
.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.0
struktur direktori, satu dengansymfony-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
diff
erenceAnda dapat memilih
diff
antara 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 -
bin
direktori (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
/var
Direktori baruDirektori baru
/var
berisi file-file yang digunakan sistem untuk menulis data selama operasinya (mirip dengan os mirip unix) .Ini juga mempermudah untuk menambahkan izin, seluruh
/var
direktori harus dapat ditulis oleh server web Anda. Anda dapat mengikuti panduan Symfony2 untuk mengatur izin (menggantikanapp/cache
&&app/logs
denganvar
), 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_requirements
akan 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.5
ke3.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
(sumber: symfony.com )
sumber
SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true
(lihat bagian atas jawaban saya untuk detail lengkap)Berikut adalah daftar perubahan antara struktur direktori lama dan baru:
var
Folder baru diperkenalkanapp/console
dipindahkan kebin/console
app/check.php
dipindahkan / diganti namanya menjadibin/symfony_requirements
app/phpunit.xml.dist
dipindahkan ke folder rootapp/SymfonyRequirements.php
dipindahkan kevar/SymfonyRequirements.php
app/cache
danapp/logs
folder telah dipindahkan kevar/cache
danvar/logs
masing-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
var
folder tersebut. Ini seharusnya membuat konfigurasi perizinan jauh lebih mudah: cukup pastikan akses tulis kevar
folder dan Anda selesai. Ini disarankan dalam posting blog ini - Saya belum mencobanya sendiri.Kedua, semua file yang dapat dieksekusi, termasuk
console
, sekarang ada di dalambin
folder. Itu memungkinkan pengguna Bash misalnya untuk menambahkan ini ke.profile
file mereka :# set PATH so it includes current bin folder PATH="./bin:$PATH"
Sekarang Anda bahkan tidak perlu mengetik
bin/console
lagi,console
cukup (perhatikan bahwa saya harus reboot agar ini berfungsi).Ada beberapa perbaikan lainnya juga.
app/check.php
sekarang dapat dieksekusi, sehingga Anda dapat menyebutnya menggunakanbin/symfony_requirements
bukanphp app/check.php
. (Menggunakan.profile
trik yang saya jelaskan sebelumnya,symfony_requirements
cukup juga)Dan, yang tak kalah pentingnya, Anda tidak lagi harus menentukan lokasi file konfigurasi saat menjalankan PHPUnit. Jadi, alih-alih
phpunit -c app
Anda cukup mengeksekusiphpunit
.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?
sumber
.profile
, Anda dapat membuat sumber ulang file di shell Anda saat ini, atau keluar dan memulai shell baru. Berjalan. ~/.profile
akan mengambil kembali file tersebut (perhatikan spasi-titik di depannya).