This week, Symfony development activity focused on merging new features for the upcoming Symfony 7.4 and 8.0 versions: added a Video constraint, introduced an access_decision() Twig function to get the security voter decision details, and added support for DTOs in Input attributes for invokable commands. We also announced that Symfony will provide the official MCP SDK for PHP, announced the first talks of the SymfonyCon Amsterdam 2025 conference and continued celebrating the legacy of Ryan Weaver.
Symfony development highlights
This week, 76 pull requests were merged (59 in code and 17 in docs) and 44 issues were closed (35 in code and 9 in docs). Excluding merges, 37 authors made 18,757 additions and 6,253 deletions. See details for code and docs.
- d33a886: [Inflector, String] fix edge cases
- bbfcf84: [Serializer] fix dealing with asymmetric visilibity for properties
- e6dfb3d: [HttpFoundation] change session column type from TEXT to STRING in SQL Server
- 1dd5bd1: [Messenger] fix incompatibility with expected lowercase columns in Firebird database
- 2205b62: [Security] pass attributes to nested ChainUserProviders
- 3cd859f: [Cache] make TagAwareAdapter registrable as a service
- e3b664d: [Cache] fix internal representation of non-static values
- 1ff83e0: [SecurityBundle] prevent accessing the tracked token storage when collecting data
- a57c946: [Serializer] fix normalizing objects with accessors having the same name as a property
- 713f099: [PHPUnit Bridge] replace backtick operator, deprecated in PHP 8.5, with shell_exec()
- c5ac440: [Security] fix HttpUtils::createRequest() when the base request is forwarded
- a143fa2: use the empty string instead of null as an array offset
- 6e42b36: [JsonStreamer] fix decoding iterable lists
- 5ff7e23: [DependencyInjection] respect original service class when a proxy is defined
- acb2027: [JsonStreamer] fix encoding iterable lists
- 87ba5d8: [Config] fix ReflectionClassResource hash validation
- 1778811: [DependencyInjection] fix optimizing ClassExistenceResource
- e7c41fe: [Validator] fall back to legacy options handling if configured named arguments do not match
- 9157094: [Routing] don't rebuild cache when controller action body changes
- e265f33: [Messenger] map legacy options to the "sentinel" key when parsing DSNs
- 67016b9: [Serializer, Validator] add JSON schema for validating and autocompleting YAML config files
- 7278aa0: [DependencyInjection] parse attributes found on abstract classes for resource definitions
- 145abac: [Runtime] expose the runtime class in $_SERVER['APP_RUNTIME']
- 18d7668: [DependencyInjection] allow multiple #[AsDecorator] attributes
- 95f0098: [Validator] add Video constraint for validating video files
- bae2c06: [DependencyInjection] optimize AutowireRequiredMethodsPass
- 4919062: [Security, TwigBridge] add access_decision() and access_decision_for_user()
- d052b75: [DoctrineBridge] use a single table in isSameDatabaseChecker
- c539c77: [Validator] allow using attributes to declare compile-time constraint metadata
- bde5221: [Serializer] allow using attributes to declare compile-time serialization metadata
- c102159: [FrameworkBundle] do not parse attributes on abstract classes with DI < 7.4
- a9dcea4: [VarExporter] add support for exporting named closures
- 75935f8: [DependencyInjection] allow Class::function(...) and global_function(...) closures in PHP DSL for factories
- eedf441: [Security, SecurityBundle] dump role hierarchy as mermaid chart
- ae256f9: [Console] add #[Input] attribute to support DTOs in invokable commands
- 1d6ac79: [Security] make UserChainProvider implement AttributesBasedUserProvider
- f7e16f1: remove ClassMetadataFactoryCompiler and other legacy cleanups
Newest issues and pull requests
- Support bitwise operations with PHP constants in YAML configuration files
- [Webhook] Add subscriber id to the subscriber class when sending webhooks
Symfony Jobs
These are some of the most recent Symfony job offers:
- Lead Symfony Developer at Buddy & Selly
Full-time - €70,000 – €80,000 / year
Full remote
View details - Lead Symfony Developer at A-Cube API
Full-time - €54,000 – €72,000 / year
Full remote
View details - Backend Symfony Developer at Spyrit
Full-time - €40,000 – €55,000 / year
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
You can publish a Symfony job offer for free on symfony.com.
They talked about us
- Symfony Station Communiqué - Stardate: ✦ 05 September 2025 ✦
- DDD with Symfony 7: Clean Architecture and Deptrac boundaries
- Symfony as JWT provider
- AI on Autopilot: Automating Your AI Agents with Symfony Scheduler
- Small Resource Server & Symfony Client Bundle
- Simplify AI-Agent Deployment: Dockerizing Symfony for Scalable
- Turnstile et Turbo, comment on fait ? (un peu d'aide de stimulus ?)
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.