This week, Symfony development focused on improving the IsGranted attribute with a new option, updated the Route attribute to allow setting multiple environments, improved the DomCrawler component to use the native HTML5 parser when using PHP 8.4 or newer and marking the JsonPath, JsonStreamer, and ObjectMapper components as no longer experimental.
Symfony development highlights
This week, 66 pull requests were merged (66 in code and 0 in docs) and 38 issues were closed (30 in code and 8 in docs). Excluding merges, 25 authors made 5,945 additions and 1,460 deletions. See details for code and docs.
- 7d2be52: [VarExporter] fix serializing classes with __serialize() returning unprefixed private properties
- ab6a579: [Intl] ake timezoneTypes' ianaMap into account
- bc35a39: [HttpFoundation] fix session cookie options assertions on PHP 8.5
- a410ac7: [Security] ignore target route when exiting impersonation
- 5c143ba: [Console] fix testing multiline question
- 4102229: [HttpKernel] fix #[MapUploadedFile] throws http exception on empty files array if argument not nullable nor has default value
- da26e42: [WebProfilerBundle] hide WDT clearer when it is hidden
- 650f171: [Messenger] use non-deprecated DBAL-API when available
- 7c54399: [Console] restore SHELL_VERBOSITY after a command is ran
- 211aaa4: [Messenger] fix name is already used by an existing object with Doctrine Oracle transport
- 034386e: [Validator] optimize serialized metadata and cleanup tests
- feee7b7: [Serializer, Validator] make internal properties private
- 7ed3a4b: [Mailer] add compatibility for Mailtrap's sandbox
- 55e5c9e: [Config] reduce the size of serialized resource checkers
- aa08fbe: [Console] fix name/alias/usages when an invokable command has an alias
- 4f2ed0c: [Notifier] add TelegramOptions::messageThreadId()
- b317ccd: [Notifier] add DiscordBotTransport
- 0d47620: [Security] add $methods support to #[IsGranted] to restrict access by HTTP method
- 6726234: [Routing] allow setting multiple envs in #[Route] attribute
- e0365cc: [HttpFoundation] add support for structured MIME suffix
- e2e4800: [Mailer] add suppression groups support in Sendgrid
- 5ef1ccb: [Routing] add possibility to create a request context with parameters directly
- af4323e: [HttpFoundation] don't check suffix on empty MIME type
- b223c40: [Notifier] remove length checks in Discord
- 8187625: [DomCrawler] use the native HTML5 parser on PHP 8.4
- b086124: [HttpFoundation] use PHPUnit's native expectUserDeprecationMessage() method
- ed38673: [Routing, Serializer] deprecate annotation aliases and getters and setters in favor of public properties on attributes
- 32b347f: [TypeInfo] add extra type alias support
- f10093d: [Console] add getter for the original command "code" object
- b614d0a: [DependencyInjection, Routing] add JSON schema for validating and autocompleting YAML config files
- 9556568: [Mailer] use the same transport for both Mailtrap's live and sandbox API
- 12fb3d1: [FrameworkBundle, Routing] auto-register routes from attributes found on controller services
- f37691b: [JsonPath, JsonStreamer, ObjectMapper] mark the components as no longer experimental
- 01b49c0: [SecurityHttp] removes final keyword from IsGranted attribute
- cd42aac: [ObjectMapper] embed collection transformer
- ff682f8: [Messenger] add --exclude-receivers to messenger:consume command
- 44f6c85: [Security] improve performance of RoleHierarchy::buildRoleMap method
- cd7cfec: [FrameworkBundle] only show relevant columns in debug:router call and adding colors
- 21dddfb: [Routing] remove deprecated getEnv and setEnv methods
- 102418d: [DomCrawler] always parse according to HTML5 rules thanks to the native DOM parser
Newest issues and pull requests
- [DependencyInjection][Routing] Define array-shapes for config arrays
- [Profiler] RFC: display app runtime in the Symfony configuration dashboard
- [Console] Add #[Input] attribute to support DTOs in invokable commands
Symfony Jobs
These are some of the most recent Symfony job offers:
- Backend Symfony Developer at Spyrit
Full-time - €40,000 – €55,000 / month
Remote + part-time onsite (Versailles, France)
View details - Backend Symfony Developer at Evergrowth
Full-time - €60,000 – €72,000 / year
Full remote
View details - Backend Symfony Developer at Eneba
Full-time - €55,000 – €66,000 / year
Full remote
View details - Backend Symfony Developer at Citrus Systems
Full-time - €3,000 – €6,000 / month
Remote + part-time onsite (Belgrade, Serbia)
View details - Lead Symfony Developer at Vacatia
Full-time - $150,000 – $180,000 / year
Remote + part-time onsite (Portland, United States)
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.
- New course announced: Symfony Bundle Development: Share the Love
They talked about us
- Symfony Station Communiqué - Stardate: ✦ 22 August 2025 ✦
- DTO vs Entity in Symfony — Why It Matters
- Pivoting from Auth0 to PHP Symfony
- Symfony Translation: Step by Step Guide
- How TypeScript Patterns Translate to PHP — A Practical, Production-Proven Guide
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.