This week, Symfony 6.4.23, 7.2.8 and 7.3.1 maintenance versions were released. Meanwhile, the upcoming Symfony 7.4 version continued adding new features such as better controller helpers, more precision in UUIDv7 values, and using PHP serialization instead of XML for dumping the container in debug/lint commands.
Symfony development highlights
This week, 81 pull requests were merged (60 in code and 21 in docs) and 43 issues were closed (25 in code and 18 in docs). Excluding merges, 33 authors made 13,876 additions and 6,338 deletions. See details for code and docs.
- 2cac9bc: [DependencyInjection] remove unused and non-existent Factory attribute use
- 6b58568: [TwigBundle] fix preload unlinked class BinaryOperatorExpressionParser
- 1eae08e: [Notifier] update fake SMS transports to use contracts event dispatcher
- c6f3da1: [Intl] fix locale validator when canonicalize is true
- 341e1bf: [DoctrineBridge] use native lazy objects on PHP 8.4+ when available
- 6265ba0: [VarDumper] avoid deprecated call in PgSqlCaster
- ff6d684: [Console] fix command option mode (InputOption::VALUE_REQUIRED)
- 95c8509: [Uid] improve entropy of the increment for UUIDv7
- a880ecb: [Serializer] fix collect_denormalization_errors flag in defaultContext
- 53c18cf: [Cache] fix using a ChainAdapter as an adapter for a pool
- ce3d3f7: [Console] table counts wrong number of padding symbols in renderCell() method when cell contain unicode variant selector
- 5d0df9f: [Console] table counts wrong column width when using colspan and setColumnMaxWidth()
- cf0e627: [TypeInfo] use an EOL-agnostic approach to parse class uses
- 4e3a96f: [TypeInfo] fix handling ConstFetchNode
- 74dc977: [HttpKernel] fix #[MapUploadedFile] handling for optional file uploads
- be33344: [VarDumper] remove duplicate default caster for Socket
- 716115c: [FrameworkBundle] also deprecate the internal rate limiter factory alias
- 1714f71: [Validator] add missing HasNamedArguments to some constraints
- 138109a: [Console] add support for Invokable Commands in CommandTester
- 7db556d: [HttpFoundation] deprecate using Request::sendHeaders() after headers have already been sent
- 868f3dc: [Security] deprecate callable firewall listeners
- a3c1d1f: [FrameworkBundle] allow using their name without added suffix when using #[Target] for custom services
- aa4cbf6: [String] leverage grapheme_str_split() PHP function
- f5390df: [SecurityBundle] also deprecate the internal rate limiter factory alias
- 7e089a5: [DependencyInjection, FrameworkBundle] use php-serialize to dump the container for debug/lint commands
- a7bd15e: [DependencyInjection] add argument $target to ContainerBuilder::registerAliasForArgument()
- fa8b32e: [Uid] add microsecond precision to UUIDv7 and optimize on x64
- 5838424: [FrameworkBundle] add ControllerHelper to provide the helpers from AbstractController as a standalone service
- 4539661: [BrowserKit] add isFirstPage() and isLastPage() methods to History
- 17473e1: [VarDumper] add support for adding more default casters to AbstractCloner::addDefaultCasters()
- be5ec1a: [SecurityBundle] don’t break security.http_utils service decoration
- 60318a9: [HttpKernel, VarDumper] remove version numbers from @internal annotations
- ba5e1d6: [Serializer] remove AdvancedNameConverterInterface
- 3079218: [Serializer] remove deprecated compiled class meta data classes
- 779dd40: [AssetMapper] remove ImportMapConfigReader::splitPackageNameAndFilePath()
- 0cae29b: [Form] change UrlType default protocol
- 6e40f04: [Validator] remove deprecated INVALID_BANK_CODE_ERROR constant
- 19a87d2: [Translation] remove deprecated escape parameter from CsvFileLoader
- 29f8fca: [HttpFoundation] remove deprecated session options from NativeSessionStorage
- 0a9cc18: [SecurityBundle] remove deprecated hide_user_not_found option
- afa287c: [Serializer] remove deprecated escape_char functionality from CsvEncoder
Newest issues and pull requests
- [RFC] Use PHP format in config files on project creation
- [RFC][HttpFoudation] Add a better way to handle invalid values and default values
- [Security] Make IsGranted Attribute non final to allow usage of custom attributes
- Allow to use false as domain for translatableMessage
Symfony Jobs
These are some of the most recent Symfony job offers:
- Symfony Developer at Fegmo Inc
Full-time – ₹600,000 – ₹2,000,000 / year
Full remote
View details - 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
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: The Clever Criteria System
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Ordering a Relation and “fetch” type
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Orphan Removal
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: The Two Sides of a Relation: Owning vs Inverse
- (Video) Symfony, Doctrine Relations & Warp Drive Basics: Fetching a Relation’s Data
They talked about us
- Symfony Station Communiqué – Stardate: 27 June 2025
- How to test your HTTP clients without the pain (Symfony + Object Asserter)
- Framework Review: Symfony
- События vs сообщения. Понимаете ли вы разницу и почему это важно?
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.