PHP 8.4 and 8.5 for the older Symfony stack: the framework forks
This page is for teams that keep an Exponential Platform 1.x / 2.5 or Nexus 1.x project alive on a current PHP. For the Exponential 6 kernel itself, see PHP 8 support of the Exponential 6 kernel.
Repositories: se7enxweb/symfony, se7enxweb/twig, se7enxweb/doctrine-bundle (repository DoctrineBundle),
se7enxweb/doctrine-dbal-schema, se7enxweb/php-parser (repository PHP-Parser), plus the platform packages
ezpublish-kernel, ezplatform-kernel, ezplatform-http-cache, ezplatform-user, ezplatform-richtext that
received PHP constraints.
What it is
Exponential Platform 1.x / 2.5 and Nexus 1.x run on the Symfony 3.4 generation of the framework. Upstream stopped maintaining it long before PHP 8.4 and 8.5 appeared, so these stacks stop with fatal errors or flood the log with deprecations on a current PHP. The forks listed here are small, targeted patches that make the old stack work on PHP 8.2 to 8.5. They are installed automatically: each fork declares the upstream package under replace, so Composer uses the fork wherever the upstream name is required.
Why it helps
- You can run an older Exponential Platform site on a supported PHP version instead of staying on an unsupported one.
- Your logs show your own warnings, not thousands of framework deprecations.
- No change to your project code: the fork has the same namespaces and the same API.
What each fork fixes
se7enxweb/symfony (Symfony 3.4 monolith)
| Date | Change | Effect |
|---|---|---|
| 2025-08-24 | ErrorHandler, LazyLoadingValueHolderGenerator, ArrayNode, ExceptionCaster adapted for PHP 8.2 / 8.4 | the debug error handler, lazy services, configuration arrays and exception dumping run on PHP 8.x |
| 2026-01-28 | return types on the VarDumper Data class; WebProfilerExtension uses a method reference instead of a closure | dump() and the profiler toolbar work on PHP 8 |
| 2026-01-29 | explicit nullable types and a ReflectionProperty deprecation fix in ErrorHandler | no deprecation notices from the handler |
| 2026-01-30 | composer.json requires se7enxweb/twig in place of twig/twig | one Twig for the whole stack |
| 2026-02-10 | PHP 8.5 deprecations in Container and Yaml\Inline | clean container and YAML parsing on 8.5 |
| 2026-02-14 | profiler data collector and Kernel changes needed by Nexus: deprecation statistics are produced and shown more gracefully | the toolbar of a default Nexus install does not fail on deprecations |
| 2026-04-09 | NativeFileSessionHandler skips its ini_set() calls when a session is already active or headers were sent | cache:clear and other CLI commands no longer crash with "An unexpected error has occurred" when the legacy kernel has started a session before the handler is built |
se7enxweb/twig (Twig 2.x)
| Date | Change | Effect |
|---|---|---|
| 2025-08-24 | NameExpression fix for PHP 8.2+ | templates compile on PHP 8.2 and later |
| 2026-01-30 | package replaces twig/twig; constraint and version raised to 2.16.2 | Composer installs the fork |
| 2026-04-09 | CallExpression::reflectCallable() detects the PHP 8.5 closure name form {closure:Class::method():N} | the compiler no longer emits an invalid dynamic method call for closures; template functions defined as closures work on PHP 8.5 |
| 2026-05-11 | explicit nullable parameter types in 36 files (Node, Error, Sandbox, Extension, Loader, Template, Parser) | no "implicitly nullable parameter" deprecation on PHP 8.4 and 8.5 |
Smaller forks
| Fork | What changed |
|---|---|
se7enxweb/doctrine-bundle (1.5 line) | vendor name replaced, replace of doctrine/doctrine-bundle and the Twig require rule (2026-01-30) |
se7enxweb/doctrine-dbal-schema | PHP 8.1 support (2025-07-01), replace shim for the upstream name (2026-04-12) |
se7enxweb/php-parser (0.9 line) | PHP 8 token compatibility: qualified name tokens expanded back to the sequences the old grammar expects; match, enum, readonly mapped to identifiers; nullsafe operator mapped to ->; attributes and PHP 7.0+ return types and nullable markers stripped (2026-05-11), plus replace of nikic/php-parser 0.9.5 |
se7enxweb/ezpublish-kernel | PHP 8.2 / 8.3 support, closure-based Twig functions replaced by named methods for PHP 8.5 (2026-01-30), cache configuration blocks that were missing (2026-02-09, 2026-02-10) |
Check what is installed
composer show -i | grep -E "se7enxweb/(symfony|twig|doctrine-bundle|php-parser)"
composer why twig/twig # shows the fork that satisfies the upstream name
php -v(Read-only commands; they change nothing.)
Limits
- These are patches to keep an old stack alive, not a Symfony upgrade. New projects should start on Platform v5 (Symfony 7.4, PHP 8.3+).
se7enxweb/twigfollows the Twig 2.16 line; the v5 stack uses Twig 3.x from upstream.
Related pages
- PHP 8 support of the Exponential 6 kernel
- Tests on PHP 8: PHPUnit 10, PHPUnit 13, PHPUnit 13 / PHP 8.4.23 test suite cleanup,
ezpSessionHandlerDBPHP 8 fixes and tests - Platform features: Nexus starter, DXP skeleton, platform administration interface, Layouts on the platform, site bundles, SQLite for Exponential Platform, legacy bridge, AdminNeo database manager
- Specifications: platform package map, platform console command names, platform SQLite installer, legacy bridge bundle
- Upgrade notes: package forks and command renames
- Changelog: platform changelog
- History: symfony, twig, DoctrineBundle, doctrine-dbal-schema, PHP-Parser, ezpublish-kernel, ecosystem overview, ecosystem months, change ledger, April 2025, September 2025, December 2025, February 2026, March 2026
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.