Обновление проектов на Symfony можно проводить двумя способами. Первый подразумевает использование только UPGRADE.md файлов при каждом релизе, заменяя устаревшие функции новыми. Такой подход позволяет поддерживать проект в актуальном состоянии, но его возможности ограничены. Второй подход более комплексный: он не только учитывает изменения, но и использует все современные функции фреймворка. Это делает код быстрее, проще в понимании и готовым к следующим обновлениям. Второй способ предпочтителен, так как повышает удобство работы с проектом и его дальнейшую поддержку.
Основные этапы обновления Symfony
1. Учет версий PHP и Symfony
Перед обновлением важно проверить совместимость версий Symfony и PHP. Например, Symfony 5.4 — последняя версия, поддерживающая PHP 7.4. Если проект работает на этой версии PHP, необходимо сначала обновить Symfony до 5.4, а затем перейти на PHP 8.0, чтобы продолжить обновление до Symfony 6.
2. Обновления в Symfony 3
🔸Новая структура каталогов. Вместо папок
/app и /Resources все файлы теперь располагаются в корне проекта.🔸Инъекция зависимостей через конструктор. Переход от использования глобального контейнера (
$this->get('service')) к внедрению зависимостей в конструкторе. Этот шаг значительно упрощает архитектуру.🔸Автозагрузка и автоконфигурация сервисов. С помощью
_defaults: autowire: true можно сократить настройки в services.yml.🔸Разделение монорепозитория. Вместо зависимости
symfony/symfony рекомендуется добавлять в проект только те пакеты Symfony, которые действительно используются.3. Нововведения Symfony 4
🟢PSR-4 автозагрузка сервисов. Можно автоматически регистрировать все классы из определенной директории, вместо ручной регистрации каждого сервиса.
🟢Переход с YAML на PHP для конфигураций. PHP-конфиги более удобны для работы с инструментами статического анализа и проверки на устаревшие методы.
4. Symfony 5 и новые атрибуты
От аннотаций к атрибутам. С версии 5.2 поддерживаются PHP-атрибуты, такие как
#[Route] и #[Required], что упрощает написание и понимание кода.Новая система аутентификации. Вместо Guard используется более современный механизм, представленный в Symfony 5.3.
5. Symfony 6 и 7
На версиях Symfony 6 и 7 акцент сделан на улучшение синтаксиса и использование новых возможностей PHP 8. Например:
#[TaggedIterator] позволяет автоматически внедрять набор сервисов.#[Autowire] упрощает передачу переменных окружения в сервисы.