This week, development activity was intense, with many bug fixes in the maintained branches, numerous deprecation removals in the 8.0 branch, and new features added to the 7.4 branch, including tighter integration with FrankenPHP, the modern PHP application server. In addition, we proposed a new feature that allows using the helpers from AbstractController without extending it.
Symfony development highlights
This week, 61 pull requests were merged (48 in code and 13 in docs) and 21 issues were closed (14 in code and 7 in docs). Excluding merges, 27 authors made additions and deletions. See details for code and docs.
- 656f786: [Messenger] fix float value for worker memory limit
- f8cca42: [FrameworkBundle] fix allow loose as an email validation mode
- c69616d: [HttpClient] limit cURL's connection cache size
- 8a846a9: [DependencyInjection] fix inlining when public services are involved
- 92f7862: [FrameworkBundle] fix argument not provided to add_bus_name_stamp_middleware
- f37df38: [Serializer] add support for discriminator map in property normalizer
- 94c2b34: [Serializer] fix TraceableSerializer when called from a callable inside array_map
- 26e3fc7: [DependencyInjection] fix generating adapters of functional interfaces
- cdedbab: [Mailer] send clone of RawMessage instance in RoundRobinTransport
- 0ff3ef1: [JsonPath] improve compliance to the RFC test suite
- e66e2de: [VarDumper] GdImage objects are handled by GdCaster
- 89c0b76: [VarDumper] fix ResourceCaster deprecation messages
- 5c61353: [ObjectMapper] fix parameter passed to class level transform
- cde2156: [FrameworkBundle] disable the Lock integration to not register the deduplicate middleware
- 7b19f53: [Console] fix backwards-compatibility with overridden add() methods
- c9500d8: [Mailer] add assertEmailAddressNotContains
- 08e4c09: [DependencyInjection] allow extending #[AsAlias] attribute
- 50d7b25: [Runtime] fix forward-compatibility with Symfony 8
- b6afc1f: [FrameworkBundle] allow to un-verbose all the method in BrowserKitAssertionsTrait
- 110481c: [HttpFoundation] use lowercase utf-8 as default response charset
- 477311f: [Runtime] automatically use FrankenPHP runner when its worker mode is detected
- 46aa500: [Ldap, Security] remove deprecated eraseCredentials() from (User|Token)Interface
- faed8e8: [Dotenv] remove DebugCommand::$defaultName and $defaultDescription
- c90cd42: [DependencyInjection] remove #[TaggedIterator] and #[TaggedLocator] attributes
- bbb4201: [HttpKernel] remove AddAnnotatedClassesToCachePass and related methods
- 8d8523c: [Yaml] raise a parse error for duplicate keys
- 722b523: [DependencyInjection] remove deprecated ContainerBuilder::getAutoconfiguredAttributes()
Newest issues and pull requests
- [FrameworkBundle] Add ControllerHelper; the helpers from AbstractController as a standalone service
- [Validator] Add min and max in both error messages of LengthValidator
Symfony CLI
Symfony CLI is a must-have tool when developing Symfony applications on your local machine. It includes the Symfony Local Server, the best way to run local Symfony applications. This week Symfony CLI released its new 5.12.0 version with the following changes:
- use sync.Once to make PidFile.LogWriter calls safe (@tucksaun)
- translate brand in the doctrine.server_version error message (@flovntp)
- refactor: store configuration filename in the struct (@tucksaun)
- refactor: add Executor.CommandLine (@tucksaun)
- refacor: remove unnecessary stack wrapping (@tucksaun)
- fix: fix generated PSH related code format (@tucksaun)
- fix: do not crash when a symlink we try to create is already present and with the designated target, fix #603 (@tucksaun)
- feat: improve warning message when Composer is not found (@tucksaun)
- feat: automatically generate latest PHP version (@tucksaun)
- feat: allow to override the path to the Symfony Console (@tucksaun)
- feat: allow to define where is Composer using the SYMFONY_COMPOSER_PATH environment variable (@tucksaun)
- feat: allow PHP executor to run executables other than PHP ones (@tucksaun)
- feat: add support for .symfony.local.dist.yaml and .symfony.local.override.yaml config files (@tucksaun)
- feat: add envs.LookupEnv (@tucksaun)
- feat: add directory to the dir flag (@tucksaun)
- do not truncate log files on each LogWriter calls (@tucksaun)
- avoid warning in server:start (@tucksaun)
- Upgrade to Go 1.24 (@tucksaun)
- Update Mercure container check to use substring matching for full container image (@Marmelatze)
- Run go mod tidy (@tucksaun)
- Remove unused func (@fabpot)
- Merge pieWrapper into phpWrapper (@tucksaun)
- Initiate a contributing guide (@tucksaun)
- Fix unbuffered os.Signal channel (@fabpot)
- Fix CLI info injection into Symfony 7.3+ WDT, fix #620 (@tucksaun)
- Extract logic for parsing Symfony CLI apps (@fabpot)
- Apply suggestions from code review (@tucksaun)
- Add support for pie (@alexandre-daubois)
- Add missing license headers (@fabpot)
- Add PIE to the 'Work on a project locally' section (@tucksaun)
Symfony Jobs
These are some of the most recent Symfony job offers:
- Backend Symfony Developer at Nomador
Full-time - €60,000 / year
Full remote
View details - Backend Symfony Developer at Substância Binária
Full-time - €2,000 – €5,000 / month
Remote + part-time onsite (Almada, Portugal)
View details - Backend Symfony Developer at Polavis
Full-time - €30 – €45 / hour
Full remote
View details - Backend Symfony Developer at Cobbleweb
Full-time - €40,000 – €75,000 / year
Full remote
View details - Lead Symfony Developer at anyIP
Full-time - $3,000 – $5,000 / month
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) Symfony, Doctrine Relations & Warp Drive Basics: Setting Relations in Foundry
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Setting the Relation
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Many To One: The King of Relationships
- (Video) Lemon Squeezy Payment Processor: Improving Javascript Event Security
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Part Entity
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Setup
- (Video) Lemon Squeezy Payment Processor: Listening to LemonSqueezy Javascript Events
They talked about us
- Symfony Station Communiqué - Stardate: ✦ 20 June 2025
- Symfony Lazy Services with Style: Boost DX using Service Subscribers
- Strategy pattern in Symfony 7
- Configuring Symfony Workflows with Attributes
- Stochastix: High-Performance Quantitative Backtesting Engine in PHP/Symfony
- Powerful Symfony String Helpers You Might Be Overlooking
- Celebrating 30 Years of PHP at JetBrains PHPverse 2025: Innovation, Performance & AI Integration
- Insecure Deserialization in Symfony: A Real Threat
- Fastfony : première Release Candidate
- Symfony: como aplicar o padrão strategy
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.