Обновление существующих приложений до Symfony Flex
Дата обновления перевода 2023-07-10
Обновление существующих приложений до 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 config не использует суффиксы в файлах конфигурации, поэтому старый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/
Если вы настроите эти пути, некоторые файлы, скопированные из рецепта, все еще могут содержать ссылки на оригинальный путь. Другими словами: вам может понадобиться обновить некоторые вещи вручную, после установки рецепта.