Оновленння існуючих додатків до Symfony Flex
Дата оновлення перекладу 2023-06-05
Оновленння існуючих додатків до 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
у вашому додатку - недостатньо.
Ви маєте також оновити структуру каталогів до тієї, що продемонстрована вище. Не існує
автоматичного інструменти для цього оновлення, тому вам потрібно дотримуватись цих
кроків вручну:
Встановіть Flex як залежність вашого проекту:
1
$ composer require symfony/flex
Якщо файл проекту
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
Якщо файл проекту
composer.json
не містить залежностіsymfony/symfony
, він вже чітко визначає свої залежності, як того вимагає Flex. Повторно встановіть всі залежності, щоб змусити Flex згенерувати файли конфігурації вconfig/
, що є найвиснажливішою частиною процесу оновлення:1 2
$ rm -rf vendor/* $ composer install
- Незалежно від того, яких кроків ви дотримувалися раніше, на даний момент у вас буде
багато нових файлів конфігурації в
config/
. Вони містять конфігурацію за замовчуванням, визначену Symfony, тому ви повинні перевірити свої початкові файли вapp/config/
, та внести необхідні зміни у нові файли. Конфігурація Flex не використовує суфікси у файлах конфігурації, тому стаирйapp/config/config_dev.yml
станеconfig/packages/dev/*.yaml
і т.д. Найважливіший файл конфігурації -
app/config/services.yml
, який тепер знаходиться тут:config/services.yaml
. Скопіюйте зміст файлу services.yaml за замовчуванням, а потім додайте власну конфігурацію сервісу. Пізніше ви зможете повернутися до цього файлу, так як завдяки функції автомонтування Symfony, ви можете видалити більшість конфігурації сервісу.Note
Переконайтеся, що ваші попередні файли конфігурації не мають заяв
imports
, що вказують на джерела, вже завантажені методамиKernel::configureContainer()
абоKernel::configureRoutes()
.Перемістіть решту змісту
app/
наступним чином (а після цього видаліть каталогapp/
):app/Resources/views/
->templates/
app/Resources/translations/
->translations/
app/Resources/<BundleName>/views/
->templates/bundles/<BundleName>/
- решта файлів
app/Resources/
->src/Resources/
Перемістіть початкові файли початкового коду 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
.- Перемістіть публічні ресурси, такі як зображення або скомпільовані файли CSS/JS
з
src/AppBundle/Resources/public/
вpublic/
(наприклад,public/images/
). - Видаліть
src/AppBundle/
. - Перемістіть джерело ресурсів (наприклад, файли SCSS) в
assets/
, та використайте Webpack Encore, щоб управляти ними та компілювати їх. - Змінні середовища
SYMFONY_DEBUG
іSYMFONY_ENV
були замінені зміннимиAPP_DEBUG
іAPP_ENV
. Скопіюйте їх значення у нові змінні, а потім видаліть попередні. - Створіть новий фронт-контролер
public/index.php
, скопіювавший джерело Symfony index.php, і, якщо ви налаштовували ваші файлиweb/app.php
іweb/app_dev.php
, скопіюйте ці зміни у новий файл. Тепер ви можете видалити старий каталогweb/
. - Оновіть скрипт
bin/console
, скопіювавши джерело Symfony bin/console, і змінивши все у відповідності до вашого початкового скрипту консолі. - Видаліть скрипт
bin/symfony_requirements
і, якщо вам потрібна заміна для нього, використайте новий перевірник вимог Symfony. - Оновіть файл
.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/
Якщо ви налаштуєте ці шляхи, деякі файли, скопійовані з рецепту, все ще можуть містити посилання на початковий шлях. Іншими словами: вам може знадобитися оновити деякі речі вручну після установки рецепту.