Skip to content

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

Open
akrilo wants to merge 8 commits into
intaro:masterfrom
akrilo:support-symfony-7
Open

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

Conversation

@akrilo
Copy link
Copy Markdown

@akrilo akrilo commented May 22, 2026

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

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.

1 participant