Archive
Symfony
Upgrade notes from long-running Symfony applications.
-
Symfony 8 on PHP 8.4: the config rewrite nobody warned us about
We went from Symfony 7.4 to 8.0 on PHP 8.4. Most of the work was converting fluent PHP and XML config to array shapes, not chasing removed APIs. Notes on what broke and whether 7.4 is the better call.
-
Cache stampedes, and the Lock component doing the boring part
A Redis failover cost us four minutes of 9 second p99 because the lock I hand rolled in 2019 had two bugs. Replacing it with the Cache Contracts and the Lock component deleted 210 lines.
-
Symfony 7: the upgrade that took an afternoon, and the one that took a month
We went 6.4 to 7.0 in January. The version bump was an afternoon of deprecation cleanup; converting 704 route annotations to attributes took a month. Notes on both, plus the normalizer that broke in production.
-
Upgrading to Symfony 6: the deprecations bill comes due
We went 4.4 LTS to 5.4 to 6.0 in six weeks. Clearing 214 deprecation messages on 5.4 was the actual work; the version bump took an afternoon. Notes on the security rewrite and two removals we missed.
-
Messenger, and the queue we should have built two years earlier
We ran background work off a cron and a pending_jobs table for five years. Replacing it with Symfony Messenger took three weeks and taught me what retries, a failure transport and mortal workers are actually for.
-
Symfony 4 and Flex, or how the skeleton got small
Two days converting a 2.8 app with one AppBundle to Symfony 4.0. The directory move, Flex recipes, parameters.yml becoming .env, and what private services break. Also why the bigger client app stays on 3.4.
-
Doctrine migrations, and why the Friday deploy broke
A generated diff, a NOT NULL column with no default, and a deploy that ran migrations before it flipped the symlink. 213 failed inserts on a Friday evening, and the expand and contract ordering I should have used.
-
Symfony 2.8 or 3.0, and why we picked the boring one
Two versions shipped in November 2015 with the same features, and the only real difference is which deprecated code is still there. Here is how the support dates, not the code, decided it for our back office.