Яка нова структура каталогів 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 це справді. Однак, все ще можливо викликати питання, встановивши змінну середовища перед запуском Composer. Перегляньте це запитання та відповідь, яку я розмістив: stackoverflow.com/q/24956881/1001110
Nic 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запитає, чи хочете ви використовувати нову структуру каталогів.

Продовжуйте читати нижче про всі зміни між структурою каталогів Symfony2та Symfony3.


Яка нова структура каталогів 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

Отже, у нас є 2 різні каталоги, які ми хочемо порівняти.


Знайдіть diffеренс

Ви можете 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
*/

Тут відображаються файли, які відрізняються у 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-подібного ОС) .

# 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-подібного ОС) .

Це також полегшує додавання дозволів, весь /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, всі перераховані вище зміни мають цілковитий сенс, їх слід легко впровадити під час оновлення з 2.5до 3.x, це, мабуть, буде найменшою з ваших проблем!

Прочитайте документи

Symfony 2.x => 3.0 Оновіть тут документи
Symfony 3.0 The Architecture

Дата випуску Symfony 3

Виглядає далеко не процес випуску (варто прочитати) :

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

Оновлений процес випуску Symfony
(джерело: symfony.com )


Дякуємо за вашу допомогу, так, я сподіваюся, що перехід з 2. * на 3.0 стане можливим і простим.
Усман

Тепер я думаю, чому команда не працює, оскільки композитор перемістився з програми в бін.
Parixit

1
Станом на вчора ми видалили запитання про структуру каталогів "3.0", оскільки це заплутало людей, і використання цієї структури поки що не дає реальної вигоди. До версії 3.0 ще багато часу, але коли ми туди дійдемо, там точно знайдуться подробиці щодо оновлення :).
ткач

1
@MarcelBurkhard Я оновив свою відповідь, щоб показати, як примусити нову структуру каталогів, ви просто додаєте змінну середовища SENSIOLABS_ENABLE_NEW_DIRECTORY_STRUCTURE=true(перегляньте верхню частину моєї відповіді для детальної інформації)
Аніль,

1
Вам слід оновити відповідь та зазначити, що вони вилучили цю опцію з програми встановлення.
Пінонік

38

Ось список змін між старою та новою структурою каталогів:

  • Введено нову varпапку
  • app/console переміщено до bin/console
  • app/check.php переміщено / перейменовано на bin/symfony_requirements
  • app/phpunit.xml.dist переміщується до кореневої папки
  • app/SymfonyRequirements.php переміщено до var/SymfonyRequirements.php
  • app/cacheі app/logsпапки були переміщені var/cacheі var/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, але це дещо хакерське рішення. Зараз мені це вдалося зробити з низкою програм, і ви можете прочитати кроки в цій суті . Однак, оскільки він не був розроблений для цього, я не можу гарантувати, що він буде працювати завжди.

Оновлення

Виявляється, Symfony більше не запитує вас, чи хочете ви використовувати нову структуру каталогів, при створенні нової програми Symfony через Composer. Однак, як і раніше можливо створювати проекти Symfony з новою структурою каталогів, використовуючи змінну середовища. Для отримання додаткової інформації див. Як я можу створити новий проект Symfony з новою структурою каталогів?


6
Вам не потрібно перезавантажуватись після зміни .profile, ви можете просто перепоставити файл у поточній оболонці або вийти і запустити нову оболонку. Запустивши . ~/.profileфайл, ви отримаєте джерело файлу (зверніть увагу на провідний крапка).
Drarok
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.