Skip to content

Добавлена поддержка Symfony 7#37

Merged
gwinn merged 8 commits into
intaro:masterfrom
akrilo:support-symfony-7
Jun 9, 2026
Merged

Добавлена поддержка Symfony 7#37
gwinn merged 8 commits into
intaro:masterfrom
akrilo:support-symfony-7

Conversation

@akrilo

@akrilo akrilo commented May 22, 2026

Copy link
Copy Markdown

Summary

Контекст/проблема

После добавления поддержки Symfony 7 сборочная линия pinba-bundle перестала проходить, при этом важно было не потерять совместимость со старыми проектами на PHP 7.4 и Symfony 4/5/6.

Проблемы были в нескольких местах:

  • composer.json был переведен на php >=8.2, из-за чего старые проекты на PHP 7.4 больше не могли установить пакет.
  • CI запускал Symfony 7.4 с ext-redis 5.3.7, а актуальный symfony/cache для Symfony 7.4 конфликтует с ext-redis <6.1.
  • PHP CS Fixer 3.95 предлагал правки, среди которых была замена strpos на str_contains; такая замена ломает поддержку PHP 7.4.
  • Текущая Redis-обертка несовместима с ext-redis 6, потому в расширении появились строгие сигнатуры методов.

Решение и обоснование

Вернул в composer.json поддержку php >=7.4, чтобы пакет оставался доступен старым проектам. Для dev-зависимостей использованы расширенные ограничения:

  • nyholm/symfony-bundle-test: ^2.0|^3.1, потому версия 2 нужна для старых Symfony, а версия 3.1 нужна для Symfony 7.
  • friendsofphp/php-cs-fixer: ^3.4, чтобы Composer мог выбрать старую совместимую версию на PHP 7.4 и новую версию на PHP 8.2+.

CI разделен на две части:

  • старый job tests оставлен для PHP 7.4/8.0/8.1/8.2 и Symfony 4.4/5.4/6.2;
  • новый job current-tests добавлен для PHP 8.2/8.3/8.4 и Symfony 6.4/7.4.

Так старые проверки не удаляются, а новая поддержка Symfony 7 проверяется отдельно. Для новой матрицы используется актуальный ext-redis, потому Symfony 7.4 уже несовместим с redis-5.3.7. Для
старой матрицы redis-5.3.7 сохранен, чтобы не менять условия проверки старых проектов.

Для старых Symfony-веток в CI добавлен composer config audit.block-insecure false. Это сделано только в CI: Composer сейчас блокирует установку старых Symfony из-за известных advisories, но задача
CI здесь — подтвердить совместимость пакета со старыми поддерживаемыми ветками, а не менять политику безопасности для пользователей пакета.

Redis-обертка разделена на две реализации:

  • legacy-реализация для PHP 7 / старого ext-redis;
  • PHP 8-реализация с сигнатурами, совместимыми с ext-redis 6.

Это нужно не только для тестов: без такой развилки пакет может падать при загрузке класса на современном ext-redis из-за несовпадения сигнатур методов delete, exec, expire и других.

В PHP CS Fixer отключено правило modernize_strpos, потому оно генерирует str_contains, недоступный на PHP 7.4. Остальные замечания форматирования исправлены.

Риски/ограничения/следующие шаги

Осталось нефатальное предупреждение PHP CS Fixer о deprecated rule visibility_required. Правило не менялось намеренно, чтобы не сломать совместимость конфигурации со старым PHP CS Fixer, который
выбирается в legacy-матрице.

Проверки выполнены на чистой временной копии:

  • Composer-зависимости для PHP 8.4 + Symfony 7.4 + ext-redis 6 устанавливаются.
  • PHPUnit: OK (3 tests, 5 assertions).
  • PHPStan: без ошибок.
  • PHP CS Fixer dry-run: без файлов к исправлению.
  • Дополнительно проверено Composer-разрешение для PHP 7.4 + Symfony 4.4 + ext-redis

@gwinn gwinn merged commit ca2e236 into intaro:master Jun 9, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants