새로운 Symfony 3 디렉토리 구조는 무엇입니까?


90

정규 작곡가 명령으로 새로운 Symfony 2.5 프로젝트를 방금 만들었습니다.

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

터미널에서 다음과 같이 묻습니다.

Symfony 3 디렉토리 구조를 사용 하시겠습니까?

Symfony 3 디렉토리 구조 는 무엇입니까 ? 전에 본 적이 없는데 ... 2.5 이후 새로운 건가요?

그것을 사용하면 어떤 이점이 있습니까?

이 디렉터리 구조를 복제 할 수있는 방법이 있습니까?


3
그 동안이 질문은 사용자간에 어느 정도의 혼란을 야기했기 때문에 설치 프로그램에서 제거되었습니다. 추가 정보 : github.com/symfony/symfony-standard/issues/674
Corneliu

@Corneliu 그것은 실제로 가지고 있습니다. 그러나 Composer를 실행하기 전에 환경 변수를 설정하여 질문을 트리거 할 수 있습니다. : 나는 게시 된 것을이 질문과 대답을 참조하십시오 stackoverflow.com/q/24956881/1001110
닉 Wortel

답변:


176

새로운 Symfony 3 디렉토리 구조를 사용하고 싶지만 질문이 보이지 않습니까?

Would you like to use Symfony 3 directory structure?새로운 프로젝트를 생성 할 때 혼란으로 인해 문제 가 제거되었습니다. 다음을 사용하여 디렉토리 구조를 강제로 사용할 수 있습니다.

새 구조를 선호하는 경우 환경 변수 SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE를 다음 .bashrc.bash_profile같이 추가 할 수 있습니다 .

미래의 모든 프로젝트가 새로운 구조를 요구하도록합니다.

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

이 프로젝트 만 새 구조를 사용할 것인지 묻도록하십시오.

특정 프로젝트에만 사용하려면 (일회성) 다음을 사용할 수 있습니다.

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

환경 변수가있는 경우 SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE설정으로 설정 true, composer새 디렉토리 구조를 사용하려는 경우 요청합니다.

Symfony2Symfony3디렉토리 구조 사이의 모든 변경 사항에 대해서는 아래를 계속 읽으십시오 .


새로운 Symfony 3 디렉토리 구조는 무엇입니까?

(그리고 그것이 나와 내 워크 플로우에 어떤 영향을 미칩니 까)

나는 2 개의 프로젝트를 만들어서 조사했다. 하나는 symfony-2.5.0디렉토리 구조이고 하나는 symfony-3(디렉토리 구조 변경 만)이다.

각 프로젝트 중 하나를 만듭니다.

# 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

이제 비교할 두 개의 다른 디렉토리가 있습니다.


difference 찾기

다음을 diff사용하여 두 디렉토리 사이를 이동할 수 있습니다 .

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

이것은 두 버전에서 다른 파일을 보여줍니다.


고장 diff

다음은 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

Symfony 3 디렉토리 구조의 이점

새 디렉터리 구조에는 여러 가지 이점이 있으며, 모두 사소하고 워크 플로를 최소한으로 변경해야 할 수도 있습니다.

PHPUnit

phpunit 구성 파일의 경로를 명시 적으로 지정하지 않고도 프로젝트 루트에서 실행할 수 있습니다.

# Symfony2
phpunit -c app/phpunit.xml

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

바이너리 실행 파일

모든 바이너리 실행 파일은 이제 모두 단일 위치 (유닉스 계열 os와 유사) 인bin 디렉토리에 있습니다.

# 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디렉토리

/var디렉토리에는 시스템이 작동하는 동안 데이터를 기록하는 파일이 포함됩니다 (유닉스 계열 OS와 유사) .

이렇게하면 권한을 더 쉽게 추가 /var할 수 있으며 웹 서버 에서 전체 디렉토리를 쓸 수 있어야합니다. 권한 설정에 대한 Symfony2 가이드를 따를 수 있으며 ( app/cache&&를 app/logs으로 대체 var) 로컬로 작성하려는 다른 파일도 여기에있을 수 있습니다.

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

Symfony 요구 사항 확인

실행 symfony_requirements하면 필수 및 선택적 환경 구성이 출력됩니다.
예 :

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

결론

Sensio Labs에서 정리 한 것 같습니다. 위의 모든 변경 사항은 완벽하게 이해되며에서 2.5로 업그레이드 할 때 쉽게 구현할 수 있어야합니다 3.x. 이러한 변경은 아마도 가장 문제가 될 것입니다!

문서 읽기

Symfony 2.x => 3.0 여기에서 문서 업그레이드
Symfony 3.0 아키텍처

Symfony 3 출시일

릴리스 프로세스 (읽을 가치가 있음)를 보면 멀어 보입니다 .

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

업데이트 된 Symfony 릴리스 프로세스
(출처 : symfony.com )


도움을 주셔서 감사합니다. 예, 2. *에서 3.0으로 쉽게 마이그레이션 할 수 있기를 바랍니다.
Ousmane

이제 작곡가가 앱에서 빈으로 이동했기 때문에 명령이 작동하지 않는 이유를 생각합니다.
Parixit 2014-06-16

1
어제부터 "3.0"디렉토리 구조 질문은 사람들을 혼란스럽게하고이 구조를 사용하는 것이 아직 실질적인 이점이 없기 때문에 제거했습니다. 3.0은 아직 멀었지만, 우리가 거기에 도착하면 확실히 업그레이드 방법에 대한 세부 사항이있을 것입니다 :).
weaverryan

1
@MarcelBurkhard 새 디렉토리 구조를 강제하는 방법을 보여주기 위해 내 답변을 업데이트했습니다. 환경 변수를 추가하기 만하면됩니다 SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(자세한 내용은 내 답변 상단 참조).
Anil

1
답변을 업데이트하고 설치 프로그램에서이 옵션을 제거했음을 확인해야합니다.
Pinoniq

38

다음은 이전 디렉토리 구조와 새 디렉토리 구조 간의 변경 사항 목록입니다.

  • var폴더가 도입되었습니다.
  • app/console 이동 bin/console
  • app/check.php 이동 / 이름이 변경되었습니다. bin/symfony_requirements
  • app/phpunit.xml.dist 루트 폴더로 이동
  • app/SymfonyRequirements.php 이동 var/SymfonyRequirements.php
  • app/cacheapp/logs폴더로 이동되었습니다 var/cachevar/logs각각

(현재는 이전 파일이 모두 제거되지 않은 것 같으므로 모든 파일을 버전 제어에 적용하기 전에 수동으로 제거하는 것이 좋습니다. 이 문제를 참조하십시오. )

그렇다면 이점은 무엇입니까?

이러한 변경에는 몇 가지 이점이 있습니다. 우선, Symfony에 쓰기 가능해야하는 모든 파일과 폴더가 이제 var폴더에 있습니다. 이렇게하면 권한 구성이 훨씬 쉬워 var집니다. 폴더에 대한 쓰기 권한 만 확인 하면 완료됩니다. 이것은 이 블로그 게시물에 제안되어 있습니다. 아직 직접 시도한 적이 없습니다.

둘째,를 포함한 모든 실행 파일 console이 이제 bin폴더에 있습니다. 예를 들어 Bash 사용자는이를 .profile파일 에 추가 할 수 있습니다.

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

이제 bin/console더 이상 입력 할 필요도 없습니다. 그저 console충분할 것입니다 (이 작업을 수행하려면 재부팅해야했습니다).

다른 개선 사항도 있습니다. app/check.php당신이 사용하여 호출 할 수 있도록, 지금 실행입니다 bin/symfony_requirements대신 php app/check.php. ( .profile앞에서 설명한 트릭을 사용하면 간단 symfony_requirements하게 충분합니다.)

그리고 마지막으로 PHPUnit을 실행할 때 더 이상 구성 파일의 위치를 ​​지정할 필요가 없습니다. 따라서 대신 phpunit -c app간단히 실행할 수 있습니다 phpunit.

기존 프로젝트도이 새로운 구조로 업그레이드 할 수 있습니까?

기본적으로 새 프로젝트를 만들 때 (를 사용하여 composer create-project symfony/framework-standard-edition path/ "2.5.*") '새 디렉토리 구조를 사용 하시겠습니까?'라는 질문 만 표시됩니다 .

그러나 기존 Symfony 응용 프로그램을 업그레이드 할 수는 있지만 다소 엉뚱한 솔루션입니다. 이제 여러 응용 프로그램에서 그렇게 할 수 있었으며이 요점 의 단계 읽을 수 있습니다 . 그러나 이것을 위해 설계된 것이 아니기 때문에 항상 작동한다고 보장 할 수는 없습니다.

최신 정보

Composer를 통해 새 Symfony 응용 프로그램을 만들 때 Symfony는 더 이상 새 디렉토리 구조를 사용할 것인지 묻지 않습니다. 그러나 환경 변수를 사용하여 새 디렉토리 구조로 Symfony 프로젝트를 생성하는 것은 여전히 ​​가능합니다. 자세한 내용 은 새 디렉터리 구조로 새 Symfony 프로젝트를 만들려면 어떻게해야합니까?를 참조하십시오.


6
을 변경 한 후 재부팅 할 필요가 없습니다. .profile현재 셸에서 파일 을 리소스로 변경 하거나 새 셸을 종료하고 시작할 수 있습니다. 실행 . ~/.profile하면 파일이 리 소싱됩니다 (선행 점 공백에 유의하십시오).
Drarok
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.