This week, Symfony development activity was very intense. The upcoming Symfony 7.3 version added a Slug constraint, introduced support for union types in OptionsResolver, enabled using HTTP/3 with the CurlHttpClient, and added support for invokable commands and input attributes. In addition, we published a summary of the Symfony project activity in 2024.
Symfony development highlights
This week, 109 pull requests were merged (86 in code and 23 in docs) and 64 issues were closed (49 in code and 15 in docs). Excluding merges, 58 authors made additions and deletions. See details for code and docs.
- 8a3a57d: [Yaml] reject inline notations followed by invalid content
- c557e18: [AssetMapper] fix JavaScript compiler creates self-referencing imports
- d3583b9: [Serializer] fix exception thrown by YamlEncoder
- dc7b96c: [Doctrine, Messenger] prevent multiple TransportMessageIdStamp being stored in envelope
- 269ba59: [WebProfilerBundle] fix event delegation on links inside toggles
- 9590658: [Messenger] fix TransportMessageIdStamp not always added
- 82011ee: [Yaml] fix inline notation with inline comment
- d6fa9a8: [RemoteEvent, Webhook] fix SendgridRequestParser and SendgridPayloadConverter
- d7e6148: [PropertyInfo] make sure that SerializerExtractor returns null for invalid class metadata
- 58a4d30: [RemoteEvent, Webhook] fix SendgridPayloadConverter category support
- 8d5be07: [Mailer] fix Sendmail memory leak
- 86b9250: [HttpFoundation] fix IpUtils::anonymize exception when using IPv6 link-local addresses with RFC4007 scoping
- dbf547b: [HttpClient] fix Undefined array key connection
- e3950a4: [HttpClient] ignore RuntimeExceptions thrown when rewinding the PSR-7 created in HttplugWaitLoop::createPsr7Response
- a6ead57: [Routing] fix configuring a single route's hosts
- 89ba0e5: [VarDumper] fix blank strings display
- 351a2ec: [Mailer] fix SMTP stream EOF handling on Windows by using feof()
- 3ceff1d: [FrameworkBundle, HttpFoundation] reset Request's formats using the service resetter
- 2cd364f: [Scheduler] clarify description of exclusion time
- 75303aa: [DoctrineBridge] clean up code for doctrine/persistence 2.x
- e363f16: [WebProfilerBundle] fix loading of toolbar stylesheet
- f6dcd9f: [Form] do not render hidden CSRF token forms with autocomplete set to off
- 8ce6d45: [Notifier] reject invalid option types in the Brevo transport
- a36b981: [DependencyInjection] support @> as a shorthand for !service_closure in YamlFileLoader
- 8c069cd: [Serializer] deprecate the CompiledClassMetadataFactory
- 18d08ff: [Validator] add Slug constraint
- dc7b96c: [Doctrine, Messenger] prevents multiple TransportMessageIdStamp being stored in envelope
- 31df2cf: use spl_object_id() instead of spl_object_hash()
- 137fe02: [Lock] use a WeakMap as store registry
- cd24b4b: [OptionsResolver] support union of types
- 0aed9fa: [FrameworkBundle, PropertyInfo] wire the ConstructorExtractor class
- bbe1b6e: [HttpFoundation] define phpdoc type for Response "statusTexts"
- f5b46e9: [Validator] fix named arguments support for the Slug constraint
- fa602c7: [HttpClient] allow using HTTP/3 with the CurlHttpClient
- 6298bfa: [Security] sync Security\ExpressionLanguage constructor with parent
- 4c071c2: [PhpUnitBridge] enable configuring mock namespaces with attributes
- d240a6d: [FrameworkBundle] always display service arguments & deprecate --show-arguments option for debug:container
- 9c0d47e: [FrameworkBundle] add compiler pass only if it exists
- 4dcb217: [PropertyAccess] move dependency definitions outside of Extension
- 8dc32f7: [AssetMapper] skip test if not supported compressors are available
- 8f04a56: [OptionResolver] allow whitespace in types
- c98cfb6: [VarDumper] add casters for object-converted resources
- 8f6560c: [Console] add support for invokable commands and input attributes
- 5fca27b: [TwigBridge] align isGrantedForUser on isGranted with falsy $field
- dfcc142: [Console] invokable command deprecations
Newest issues and pull requests
- Configure a custom marshaller in cache framework bundle per cache pool
- [Console] Add broader support for command help definition
- [Pgp] Add the component
- [JsonEncoder] Allow to warm up arbitrary types
- [AccessControl] Add Access Control component with strategies and voters
- [OptionsResolver] Add support for array<> syntax to validate keys
Symfony Jobs
These are some of the most recent Symfony job offers:
- Symfony Developer at fortrabbit
Full-time - €50,000 – €70,000 / year
Full remote
View details - Backend Symfony Developer at anyip.io
Contract / Freelance - $20 – $40 / hour
Full remote
View details - Symfony Developer at Kennisnet
Full-time - €4,104 – €5,673 / month
Remote + part-time onsite (Zoetermeer, Netherlands)
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) Symfony 7 - Doctrine, Symfony 7 & the Database: Starship Upgrade: Adding Slug and Timestamp Fields
- (Video) Symfony 7 - Doctrine, Symfony 7 & the Database: Auto Slug and Timestamps with Doctrine Extensions
- (Video) Symfony 7 - Doctrine, Symfony 7 & the Database: High-Tech Controllers: Auto-inject Entities
- (Video) Symfony 7 - Doctrine, Symfony 7 & the Database: Black Hole: Deleting Entities
- (Video) Symfony 7 - Doctrine, Symfony 7 & the Database: Ship Upgrades: Updating an Entity
They talked about us
- Symfony Station Communiqué - 10 January 2025
- Symfony @required - Avoid the Temptation and Use it Right
- Replacing laminas-mail with Symfony mailer in dot-mail
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.