Cấu trúc thư mục Symfony 3 mới là gì?


90

Tôi vừa tạo một dự án Symfony 2.5 mới bằng lệnh soạn nhạc thông thường:

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

Terminal hỏi tôi:

Bạn có muốn sử dụng cấu trúc thư mục Symfony 3 không?

Cấu trúc thư mục Symfony 3 này là gì? Tôi chưa bao giờ nhìn thấy nó trước đây ... Nó mới từ 2.5?

Những lợi ích khi sử dụng nó là gì?

Có cách nào để sao chép cấu trúc thư mục này không?


3
Lưu ý rằng trong thời gian chờ đợi, câu hỏi này đã bị xóa khỏi trình cài đặt vì nó đã gây ra một mức độ nhầm lẫn nhất định cho người dùng. Thông tin thêm: github.com/symfony/symfony-standard/issues/674
Corneliu

@Corneliu nó thực sự có. Tuy nhiên, vẫn có thể kích hoạt câu hỏi, bằng cách đặt một biến môi trường trước khi chạy Composer. Xem câu hỏi này và câu trả lời mà tôi đã đăng: stackoverflow.com/q/24956881/1001110
Nic Wortel

Câu trả lời:


176

Tôi muốn sử dụng cấu trúc thư mục Symfony 3 mới, nhưng tôi không thấy câu hỏi?

Câu hỏi Would you like to use Symfony 3 directory structure?đã bị loại bỏ khi tạo một dự án mới do sự nhầm lẫn mà nó gây ra. Bạn có thể buộc sử dụng cấu trúc thư mục bằng cách sử dụng như sau:

Nếu bạn thích cấu trúc mới, bạn có thể thêm biến môi trường SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREvào của bạn .bashrchoặc .bash_profiletương tự:

Làm cho tất cả các dự án trong tương lai yêu cầu cấu trúc mới

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

CHỈ THỰC HIỆN dự án NÀY hỏi xem chúng ta có muốn sử dụng cấu trúc mới không.

Nếu bạn muốn nó chỉ cho một dự án cụ thể (một dự án tắt), bạn có thể sử dụng:

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

Nếu biến môi trường SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREđược đặt và đặt thành true, composersẽ hỏi bạn có muốn sử dụng cấu trúc thư mục mới hay không.

Đọc tiếp bên dưới cho tất cả những thay đổi giữa Symfony2Symfony3cấu trúc thư mục.


Cấu trúc thư mục Symfony 3 mới là gì?

(và nó ảnh hưởng đến tôi và quy trình làm việc của tôi như thế nào)

Tôi đã xem xét vấn đề này bằng cách tạo 2 dự án, một có symfony-2.5.0cấu trúc thư mục, một có symfony-3(chỉ thay đổi cấu trúc thư mục).

Thực hiện một trong mỗi dự án:

# 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

Vì vậy, bây giờ chúng ta có 2 thư mục khác nhau mà chúng ta muốn so sánh.


Tìm các difference

Bạn có thể diffgiữa 2 thư mục bằng cách sử dụng:

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

Điều này cho thấy các tệp khác nhau trong 2 phiên bản.


Phân tích của diff

Đây là bảng phân tích mọi thứ trong khác biệt.

# 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

Lợi ích của cấu trúc thư mục Symfony 3

Cấu trúc thư mục mới có một số lợi ích, tất cả đều nhỏ và có thể yêu cầu những thay đổi nhỏ đối với quy trình làm việc của bạn.

PHPUnit

phpunit có thể chạy từ gốc dự án mà không cần phải chỉ định rõ ràng đường dẫn của tệp cấu hình.

# Symfony2
phpunit -c app/phpunit.xml

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

Binary Executables

Tất cả các tệp thực thi nhị phân giờ đây đều nằm ở một vị trí duy nhất - binthư mục (tương tự như hệ điều hành giống 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

Mới /varthư mục

Thư mục mới /varchứa các tệp mà hệ thống ghi dữ liệu vào trong quá trình hoạt động của nó (tương tự như hệ điều hành giống unix) .

Điều này cũng làm cho việc thêm quyền dễ dàng hơn, toàn bộ /varthư mục phải được máy chủ web của bạn có thể ghi được. Bạn có thể làm theo hướng dẫn Symfony2 để đặt quyền (thay thế app/cache&& app/logsbằng var), bất kỳ tệp nào khác mà bạn muốn ghi cục bộ cũng có thể nằm ở đây.

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

Kiểm tra các yêu cầu của Symfony

Chạy symfony_requirementssẽ xuất ra các cấu hình môi trường bắt buộc & tùy chọn.
ví dụ:

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

Phần kết luận

Có vẻ như Sensio Labs đã dọn dẹp rất tốt, tất cả những thay đổi trên đều có ý nghĩa hoàn hảo, chúng sẽ dễ thực hiện khi nâng cấp từ 2.5lên 3.x, đây có lẽ sẽ là vấn đề của bạn ít nhất!

Đọc tài liệu

Symfony 2.x => 3.0 Nâng cấp tài liệu tại đây
Symfony 3.0 The Architecture

Ngày phát hành cho Symfony 3

Có vẻ xa khi nhìn vào quá trình Phát hành (đáng đọc) :

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

Cập nhật Quy trình phát hành Symfony
(nguồn: symfony.com )


Cảm ơn sự giúp đỡ của bạn, vâng, tôi hy vọng rằng việc chuyển đổi từ 2. * sang 3.0 sẽ có thể và dễ dàng.
Ousmane

Bây giờ tôi nghĩ rằng tại sao lệnh không hoạt động vì trình soạn nhạc đã chuyển từ ứng dụng sang thùng rác.
Parixit

1
Kể từ ngày hôm qua, chúng tôi đã xóa câu hỏi cấu trúc thư mục "3.0" vì nó khiến mọi người bối rối và chưa có lợi ích thực sự nào khi sử dụng cấu trúc này. 3.0 vẫn còn lâu mới có, nhưng khi chúng ta đến đó, chắc chắn sẽ có chi tiết về cách nâng cấp :).
Weaverryan

1
@MarcelBurkhard Tôi đã cập nhật câu trả lời của tôi để hiển thị như thế nào để buộc các cấu trúc thư mục mới, bạn chỉ cần thêm biến môi trường SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(xem phía trên cùng của câu trả lời của tôi để biết chi tiết đầy đủ)
Anil

1
Bạn nên cập nhật câu trả lời và lưu ý rằng họ đã xóa tùy chọn này khỏi trình cài đặt.
Pinoniq,

38

Đây là danh sách các thay đổi giữa cấu trúc thư mục cũ và mới:

  • Một varthư mục mới được giới thiệu
  • app/console được chuyển đến bin/console
  • app/check.php được chuyển / đổi tên thành bin/symfony_requirements
  • app/phpunit.xml.dist được chuyển đến thư mục gốc
  • app/SymfonyRequirements.php được chuyển đến var/SymfonyRequirements.php
  • các app/cacheapp/logscác thư mục đã được chuyển đến var/cachevar/logslần lượt

(Hiện tại, dường như không phải tất cả các tệp cũ đều bị xóa, vì vậy bạn có thể muốn thực hiện việc này theo cách thủ công trước khi chuyển tất cả các tệp vào kiểm soát phiên bản. Hãy xem sự cố này )

Vậy lợi ích là gì?

Có một số lợi ích với những thay đổi này. Trước hết, tất cả các tệp và thư mục có thể ghi được cho Symfony hiện đã có trong varthư mục. Điều này sẽ làm cho việc định cấu hình quyền dễ dàng hơn rất nhiều: chỉ cần đảm bảo quyền ghi vào varthư mục và bạn đã hoàn tất. Điều này được đề xuất trong bài đăng trên blog này - Tôi vẫn chưa thử điều này.

Thứ hai, tất cả các tệp thực thi, bao gồm console, hiện nằm trong binthư mục. Điều đó cho phép người dùng Bash chẳng hạn thêm cái này vào .profiletệp của họ :

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

Bây giờ bạn thậm chí không cần phải nhập bin/consolenữa, chỉ đơn giản là consoleđủ (lưu ý rằng tôi đã phải khởi động lại để điều này hoạt động).

Ngoài ra còn có một số cải tiến khác. app/check.phpbây giờ là một tệp thực thi, vì vậy bạn có thể gọi nó bằng cách sử dụng bin/symfony_requirementsthay vì php app/check.php. (Sử dụng .profilethủ thuật mà tôi đã mô tả trước đó, đơn giản là symfony_requirementscũng đủ)

Và, cuối cùng nhưng không kém phần quan trọng, bạn không còn phải chỉ định vị trí của tệp cấu hình khi chạy PHPUnit. Vì vậy, thay vì phpunit -c appbạn có thể thực hiện đơn giản phpunit.

Tôi cũng có thể nâng cấp các dự án hiện có lên cấu trúc mới này không?

Theo mặc định, bạn sẽ chỉ nhận được câu hỏi 'Bạn có muốn sử dụng cấu trúc thư mục mới không' khi tạo một dự án mới (sử dụng composer create-project symfony/framework-standard-edition path/ "2.5.*").

Tuy nhiên, có thể nâng cấp một ứng dụng Symfony hiện có, nhưng đó là một giải pháp hơi khó. Tôi đã quản lý để làm như vậy với một số ứng dụng hiện tại và bạn có thể đọc các bước trong ý chính này . Tuy nhiên, vì nó không được thiết kế cho việc này, tôi không thể đảm bảo nó sẽ hoạt động bình thường.

Cập nhật

Hóa ra Symfony không còn hỏi bạn có muốn sử dụng cấu trúc thư mục mới hay không khi tạo một ứng dụng Symfony mới thông qua Composer. Tuy nhiên, vẫn có thể tạo các dự án Symfony với cấu trúc thư mục mới, bằng cách sử dụng một biến môi trường. Để biết thêm thông tin, hãy xem Làm cách nào để tạo một dự án Symfony mới với cấu trúc thư mục mới?


6
Bạn không cần phải khởi động lại sau khi thay đổi .profile, bạn chỉ có thể nguồn lại tệp trong trình bao hiện tại của mình hoặc thoát và bắt đầu một trình bao mới. Đang chạy . ~/.profilesẽ lấy lại nguồn của tệp (lưu ý dấu chấm ở đầu).
Drarok
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.