This week, development focused on the upcoming Symfony 7.4 and 8.0 releases. We added new features such as the ObjectMapperAwareInterface, improved value transformers in JsonStreamer, and enabled loading JSON via imports in AssetMapper. We also removed deprecated features, including Doctrine entity auto-mapping. In addition, we announced more details about SymfonyCon Amsterdam 2025.
Symfony development highlights
This week, 72 pull requests were merged (62 in code and 10 in docs) and 34 issues were closed (22 in code and 12 in docs). Excluding merges, 31 authors made 7,822 additions and 1,836 deletions. See details for code and docs.
- 578c2e3: [WebProfilerBundle] increase compatibility of toolbar with Turbo
- da8bc22: [FrameworkBundle] don't use Email::VALIDATION_MODES in Configuration
- 3261116: [Cache] fix Redis compatibility with different Relay versions
- 4af9890: [Form, PhpUnitBridge] remove usage of noop ReflectionProperty::setAccessible()
- df58224: [Console] fix JSON description for negatable input flags
- 39ff860: [Mailer] update Brevo webhook IPs
- e092b46: [WebProfilerBundle] fix missing indent on non PHP files opended in the profiler
- 97429b7: [Config] do not generate unreachable configuration paths
- 3540952: [Lock] fallback to eval when LOAD fails due to missing script
- dabfa59: [Security] fix added $token argument to UserCheckerInterface::checkPostAuth()
- c3eb27f: [Config] fix GeneratedConfigTest not being able to generate snapshots anymore
- de2a7ab: [Serializer] handle invalid mapping type property type
- 5bf8b3e: [ObjectMapper] fix test using LazyObjectInterface
- cf7da9e: [JsonPath] fix parsing invalid Unicode codepoints
- 51ee4ed: [ObjectMapper] skip reading uninitialized values
- d2b1513: [Console] fix TreeHelper::addChild when providing a string
- 5db13d5: [ObjectMapper] add ObjectMapperAwareInterface to set the owning object mapper instance
- b065b9a: [Semaphore] enabled usage of EVALSHA and LOAD SCRIPT over regular EVAL
- 6e14bca: remove legacy config for disabling annotations
- 8150927: [HttpFoundation] simplify UriSigner::verify to use match
- 3686363: [Translation] add StaticMessage
- 8c3d388: [JsonStreamer] provide current object to value transformers
- d3a0df0: [JsonStreamer] add include_null_properties option
- edae79d: [Security] support union type for #[CurrentUser] attribute
- da5988e: [Validator] remove docblocks for deprecated argument types
- c7493bb: [AssetMapper] add support for loading JSON using import statements
- 2663b3b: [Validator] add min and max in both error messages of LengthValidator
- d219ebe: [BrowserKit] add PHPUnit constraints: BrowserHistoryIsOnFirstPage and BrowserHistoryIsOnLastPage
- 6832421: [Serializer] add CDATA_WRAPPING_NAME_PATTERN support to XmlEncoder
- 8198373: remove legacy code paths that rely on feature checks
- 6e5a24c: [DoctrineBridge] remove support for auto-mapping Doctrine entities to controller arguments
- 419f671: [FrameworkBundle] remove deprecated TranslationUpdateCommand
- ec69e60: [AssetMapper] make argument $projectDir of ImportMapRequireCommand mandatory
- eaecccb: [Messenger] remove text format when using the messenger:stats command
- 265d4b2: [HttpFoundation] trigger PHP warning when using Request::sendHeaders() after headers have already been sent
- 000ade9: [Security] throw when passing an empty string as $userIdentifier and tighten AuthenticatorManager and OidcTokenHandler arguments
- 7d3f4fe: [DependencyInjection] remove !tagged tag, use !tagged_iterator instead
- 474bd79: [Translation] remove TranslatableMessage::__toString() method, use trans() or getMessage() instead
- dc34dbd: clean up remaining ExpectUserDeprecationMessageTrait usages
- 2c0dd69: declare new parameters on interfaces and methods explicitly
Newest issues and pull requests
- [HttpFoundation, HttpKernel, WebProfilerBundle] Add support for the QUERY HTTP method
- Support union types when using the #[AsEventListener] attribute
- [RFC] New command lint:deprecations
- [OptionsResolver] Optimize splitOutsideParenthesis performance
Symfony Jobs
These are some of the most recent Symfony job offers:
- Lead Symfony Developer at Vacatia
Full-time - $150,000 – $180,000 / year
Remote + part-time onsite (Portland, United States)
View details - Symfony Developer at DocuPet Inc.
Full-time - CA$115,000 – CA$135,000 / year
Full remote
View details - Backend Symfony Developer at Wappnet Systems Pvt Ltd
Full-time - ₹1,000,000 – ₹2,000,000 / year
Ahmedabad, India
View details - Symfony Developer at Neuron Academy
Contract / Freelance - $25 – $50 / hour
Full remote
View details - Symfony Developer at Fegmo Inc
Full-time - ₹600,000 – ₹2,000,000 / year
Full remote
View details
You can publish a Symfony job offer for free on symfony.com.
SymfonyCasts Updates
SymfonyCasts is the official way to learn Symfony. Select a track for a guided path through 100+ video tutorial courses about Symfony, PHP and JavaScript.
This week, SymfonyCasts published the following updates:
- (Video) Bonjour-> Hello-> Hola: Translate your Site: Translation "Keys"
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Cascade Persist
- (Video) Bonjour-> Hello-> Hola: Translate your Site: Translating Content
- (Video) Bonjour-> Hello-> Hola: Translate your Site: Create a Language Switcher
- (Video) Bonjour-> Hello-> Hola: Translate your Site: Localized Routes
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Re-adding addDroid(): Hide that Join Entity!
- (Video) Bonjour-> Hello-> Hola: Translate your Site: Installing the Translation Component
They talked about us
- Mastering Asynchronous Processing in PHP with Symfony Messenger
- Testing delayed Symfony Messenger message handling with Behat
- How to Prioritize Messages When Building Asynchronous Applications With Symfony Messenger
Call to Action
- Follow Symfony on X, on Mastodon, on Bluesky and on Threads and share this article.
- Subscribe to the Symfony blog RSS and never miss a Symfony story again.