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