Оновленння існуючих додатків до Symfony Flex

Дата оновлення перекладу 2022-11-06

Оновленння існуючих додатків до Symfony Flex

Використання Symfony Flex не обовʼязкове, навіть в Symfony 4, де Flex використовується за замовчуванням. Однак, Flex настільки зручний і так покращує вашу продуктивність, що дуже рекомендовано оновити ваші існуючі додатки до нього.

Symfony Flex рекомендує, щоб додатки використовували поточну структуру каталогів, яка співпадає з тією, що використовується за замовчуванням в Symfony 4, але ви можете налаштувати деякі каталоги :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
your-project/
├── assets/
├── bin/
│   └── console
├── config/
│   ├── bundles.php
│   ├── packages/
│   ├── routes.yaml
│   └── services.yaml
├── public/
│   └── index.php
├── src/
│   ├── ...
│   └── Kernel.php
├── templates/
├── tests/
├── translations/
├── var/
└── vendor/

Це означає, що установки залежності symfony/flex у вашому додатку - недостатньо. Ви маєте також оновити структуру каталогів до тієї, що продемонстрована вище. Не існує автоматичного інструменти для цього оновлення, тому вам потрібно дотримуватись цих кроків вручну:

  1. Встановіть Flex як залежність вашого проекту:

    1
    $ composer require symfony/flex
  2. Якщо файл проекту composer.json містить залежність symfony/symfony, він все ще залежить від Стандартної версії Symfony, яка більше не доступна в Symfony 4. Спочатку видаліть цю залежність:

    1
    $ composer remove symfony/symfony

    Тепер додайте пакет symfony/symfony до розділу conflict файлу проекту composer.json, як продемонстровано у цьому прикладі проекту skeleton-project, щоб він не був встановлений знову:

    1
    2
    3
    4
    5
    6
    7
    8
    {
          "require": {
              "symfony/flex": "^1.0",
    +   },
    +   "conflict": {
    +       "symfony/symfony": "*"
          }
      }

    Тепер ви повинні додати composer.json до всіх залежностей Symfony, які вимагаються вашим проектом. Швидкий спосіб зробити це - додати всі компоненти, які були включені у попередню залежність symfony/symfony, а пізніше ви можете видалити все, що вам не потрібно:

    1
    2
    3
    $ composer require annotations asset orm-pack twig \
      logger mailer form security translation validator
    $ composer require --dev dotenv maker-bundle orm-fixtures profiler
  3. Якщо файл проекту composer.json не містить залежності symfony/symfony, він вже чітко визначає свої залежності, як того вимагає Flex. Повторно встановіть всі залежності, щоб змусити Flex згенерувати файли конфігурації в config/, що є найвиснажливішою частиною процесу оновлення:

    1
    2
    $ rm -rf vendor/*
    $ composer install
  4. Незалежно від того, яких кроків ви дотримувалися раніше, на даний момент у вас буде багато нових файлів конфігурації в config/. Вони містять конфігурацію за замовчуванням, визначену Symfony, тому ви повинні перевірити свої початкові файли в app/config/, та внести необхідні зміни у нові файли. Конфігурація Flex не використовує суфікси у файлах конфігурації, тому стаирй app/config/config_dev.yml стане config/packages/dev/*.yaml і т.д.
  5. Найважливіший файл конфігурації - app/config/services.yml, який тепер знаходиться тут: config/services.yaml. Скопіюйте зміст файлу services.yaml за замовчуванням, а потім додайте власну конфігурацію сервісу. Пізніше ви зможете повернутися до цього файлу, так як завдяки функції автомонтування Symfony, ви можете видалити більшість конфігурації сервісу.

    Note

    Переконайтеся, що ваші попередні файли конфігурації не мають заяв imports, що вказують на джерела, вже завантажені методами Kernel::configureContainer() або Kernel::configureRoutes().

  6. Перемістіть решту змісту app/ наступним чином (а після цього видаліть каталог app/):

    • app/Resources/views/ -> templates/
    • app/Resources/translations/ -> translations/
    • app/Resources/<BundleName>/views/ -> templates/bundles/<BundleName>/
    • решта файлів app/Resources/ -> src/Resources/
  7. Перемістіть початкові файли початкового коду PHP з src/AppBundle/*, окрім файлів, що відносяться до пакетів (на кшталт AppBundle.php і DependencyInjection/), в src/, та оновіть простір імен для кожного переміщеногго файлу, щоб він був App\... (просунуті IDE можуть робити це автоматично).

    На додаток до переміщення файлів, оновіть значення autoload і autoload-dev файлу composer.json як продемонстровано у цьому прикладі, щоб використовувати App\ і App\Tests\ в якості простору імен додатку.

    Якщо ви використали багато пакетів для організації свого коду, ви маєте реорганізувати ваш код в src/. Наприклад, якщо у вас були src/UserBundle/Controller/DefaultController.php і src/ProductBundle/Controller/DefaultController.php, ви можете перемістити їх в src/Controller/UserController.php і src/Controller/ProductController.php.

  8. Перемістіть публічні ресурси, такі як зображення або скомпільовані файли CSS/JS з src/AppBundle/Resources/public/ в public/ (наприклад, public/images/).
  9. Видаліть src/AppBundle/.
  10. Перемістіть джерело ресурсів (наприклад, файли SCSS) в assets/, та використайте Webpack Encore, щоб управляти ними та компілювати їх.
  11. Змінні середовища SYMFONY_DEBUG і SYMFONY_ENV були замінені змінними APP_DEBUG і APP_ENV. Скопіюйте їх значення у нові змінні, а потім видаліть попередні.
  12. Створіть новий фронт-контролер public/index.php, скопіювавший джерело Symfony index.php, і, якщо ви налаштовували ваші файли web/app.php і web/app_dev.php, скопіюйте ці зміни у новий файл. Тепер ви можете видалити старий каталог web/.
  13. Оновіть скрипт bin/console, скопіювавши джерело Symfony bin/console, і змінивши все у відповідності до вашого початкового скрипту консолі.
  14. Видаліть скрипт bin/symfony_requirements і, якщо вам потрібна заміна для нього, використайте новий перевірник вимог Symfony.
  15. Оновіть файл .gitignore, щоб замінити існуючий запис var/logs/ на var/log/, що є новим іменем для каталогу логів.

Налаштування шляхів Flex

Рецепти Flex роблять декілька припущень про структуру каталогів вашого проекту. Деякі з цих припущень можна налаштувати, додавши ключ у розділі extra вашого файлу composer.json. Наприклад, щоб вказати Flex копіювати всі PHP-класи в src/App замість src:

1
2
3
4
5
6
7
{
    "...": "...",

    "extra": {
        "src-dir": "src/App"
    }
}

Шляхи, які можна конфігурувати:

  • bin-dir: за замовчуванням bin/
  • config-dir: за замовчуванням config/
  • src-dir: за замовчуванням src/
  • var-dir: за замовчуванням var/
  • public-dir: за замовчуванням public/

Якщо ви налаштуєте ці шляхи, деякі файли, скопійовані з рецепту, все ще можуть містити посилання на початковий шлях. Іншими словами: вам може знадобитися оновити деякі речі вручну після установки рецепту.