新しいSymfony 3のディレクトリ構造は何ですか?


90

通常のcomposerコマンドで新しい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

このプロジェクトのみに、新しい構造を使用するかどうかを尋ねさせます。

特定のプロジェクトのみ(1回限り)に必要な場合は、以下を使用できます。

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

環境変数SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTUREがに設定および設定されている場合truecomposerは、新しいディレクトリ構造を使用するかどうかを尋ねます。

Symfony2Symfony3ディレクトリ構造の間のすべての変更については、以下をお読みください。


新しいSymfony 3のディレクトリ構造は何ですか?

(そしてそれは私と私のワークフローにどのように影響しますか)

私はこれを2つのプロジェクトを作成することで調べました。1つはsymfony-2.5.0ディレクトリ構造、もう1つはsymfony-3(ディレクトリ構造の変更のみ)です。

各プロジェクトの1つを作成します。

# 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

これで、比較する2つの異なるディレクトリがあります。


diffエレンスを見つける

以下diffを使用して、2つのディレクトリ間を移動できます。

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

これは、2つのバージョンで異なるファイルを示しています。


の内訳 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

バイナリ実行可能ファイル

現在、すべてのバイナリ実行可能ファイルは、単一の場所、つまりbinディレクトリ(UNIXのようなOSと同様)にあります。

# 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ディレクトリには、システムが動作中にデータを書き込むファイルが含まれます(UNIXに似たosと同様)

これにより、権限の追加も簡単になり、/varディレクトリ全体がWebサーバーから書き込み可能になります。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

Composerがアプリからビンに移動したため、コマンドが機能しないのはなぜかと思います。
Parixit 2014年

1
昨日、「3.0」というディレクトリ構造の質問を削除しました。これは、混乱を招くものであり、この構造を使用するメリットはまだないためです。3.0はまだまだ先ですが、そこに着くと、アップグレード方法の詳細が明らかになります:)。
weaverryan 2014

1
@MarcelBurkhard新しいディレクトリ構造を強制する方法を示すために私の回答を更新しました。環境変数を追加するだけですSENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(詳細については私の回答の上部を参照してください)
Anil

1
回答を更新して、インストーラからこのオプションが削除されたことに注意してください。
Pinoniq 2015年

38

これは、古いディレクトリ構造と新しいディレクトリ構造の間の変更のリストです。

  • 新しいvarフォルダが導入されました
  • app/console に移動しました bin/console
  • app/check.php に移動/名前変更 bin/symfony_requirements
  • app/phpunit.xml.dist ルートフォルダに移動さ​​れます
  • app/SymfonyRequirements.php に移動しました var/SymfonyRequirements.php
  • フォルダがに移動されていると、それぞれ、app/cacheapp/logsvar/cachevar/logs

(現在、古いファイルのすべてが削除されているとは限らないため、すべてのファイルをバージョン管理にコミットする前に手動で削除することをお勧めします。この問題を参照してください)

それで、利点は何ですか?

これらの変更にはいくつかの利点があります。まず、Symfonyに書き込み可能である必要があるすべてのファイルとフォルダーがフォルダーにありvarます。これにより、アクセス許可の構成がはるかに簡単にvarなります。フォルダーへの書き込みアクセスを確認すれば完了です。これはこのブログ投稿で提案されています-私はまだこれを試していません。

次に、を含むすべての実行可能ファイルconsolebinフォルダーに追加されました。これにより、たとえば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 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.