Symfony 4.1.0 is going to be released later today. As for any other Symfony minor release, our backward compatibility promise applies and this means that you should be able to upgrade easily without changing anything in your code.
We've already blogged about the great 4.1 new features, but here is a curated list of the most relevant changes (this version has a total of 200 new small and big features):
New Components
Messenger (sroze) #24411 improved by many other pull requests:
- Allow to scope handlers per bus (ogizanagi, sroze) #27275
- Uses custom method names for handlers (sroze) #27034
- Add debug:messenger CLI command (ro0NL, sroze) #26803
- Support configuring messages when dispatching (ogizanagi) #26945
- Add a time limit receiver (sdelicata) #27130
- Add a memory limit option for ConsumeMessagesCommand` (sdelicata) `#26975
- Define multiple buses from the framework.messenger.buses` configuration (sroze) `#26864
- Allow to configure the transport (sroze) #26941
- Add AMQP adapter (sroze) #26632
- Add a MessageHandlerInterface (multiple messages + auto-configuration) #26685 (sroze)
- Add a middleware that validates messages (Nyholm) #26648
- Add a middleware that wraps all handlers in one Doctrine transaction. (Nyholm) #26647
- Clone messages to show in profiler (Nyholm) #26650
FrameworkBundle
- Add PSR-11 "ContainerBag" to access parameters as-a-service (nicolas-grekas, sroze) #25288
- Add ControllerTrait::getParameter() (chalasr) #25439
- Add support to 307/308 HTTP status codes in RedirectController (ZipoKing) #26213
- Deprecate bundle:controller:action and service:method notation (Tobion) #26085
- Allow fetching private services from test clients (nicolas-grekas) #26499
- Add command to delete an item from a cache pool (pierredup) #26223
- framework.php_errors.log now accept a log level (Simperfit) #26504
- Keep query in redirect (Simperfit) #26281
- Add the ability to search a route (Simperfit) #26121
- Add cache.app.simple psr simple cache (dmaicher) #25710
- Add email_validation_mode option (xabbuh) #25478
- Add atom editor to ide config (lexcast) #25415
Routing
- Allow no-slash root on imported routes (nicolas-grekas) #26284
- Allow inline definition of requirements and defaults (nicolas-grekas) #26518
- Implement i18n routing (frankdejonge, nicolas-grekas) #26143
- Match 77.7x faster by compiling routes in one regexp (nicolas-grekas) #26059
- Parse PHP constants in YAML routing files (ostrolucky) #25293
Serializer
- Cache the normalizer to use when possible (dunglas, nicolas-grekas) #27049
- Allow to access to the context and various other infos in callbacks and max depth handler (dunglas) #27017
- Added a ConstraintViolationListNormalizer (lyrixx) #22150
- Ignore comments when decoding XML (q0rban) #26445
- Add a MaxDepth handler (dunglas) #26108
- add a constructor argument to return csv always as collection (Simperfit) #25218
- add a context key to return always as collection for XmlEncoder (Simperfit) #25369
- Fix security issue on CsvEncoder about CSV injection (welcoMattic) #24508
- default_constructor_arguments context option for denormalization (Nek-) #25493
- Serialize and deserialize from abstract classes (sroze) #24375
- Parse PHP constants in YAML mappings (ostrolucky) #25294
Validator
- Html5 Email Validation (PurpleBooth) #24442
- Deprecated "checkDNS" option in Url constraint (ro0NL) #25516
- Deprecate use of Locale validation constraint without setting "canonicalize" option to true` (phansys) `#26075
- Support protocolless URLs validation (MyDigitalLife) #24308
- Add canonicalize option for Locale validator (phansys) #22353
- Add option to pass custom values to Expression validator (ostrolucky) #25504
VarDumper
- Add dd() helper == dump() + exit() (nicolas-grekas) #26970
- Introduce a new way to collect dumps through a server dumper (ogizanagi, nicolas-grekas) #23831
- Provide binary, allowing to start a server at any time (ogizanagi) #26654
- Add a GMP caster in order to cast GMP resources into string or integer (Simperfit) #25237
Workflow
- Added a new 'all' method on the registry (alexpozzi, lyrixx) #26656
- Added a TransitionException (andrewtch, lyrixx) #26651
- Add a MetadataStore to fetch some metadata (lyrixx) #26092
- Add transition blockers (d-ph, lyrixx) #26076
- Remove constraints on transition/place name (lyrixx) #26079
- Add PlantUML dumper to workflow:dump command (Plopix) #24705
- Workflow name as graph label (shdev) #25148
- Introduce a Workflow interface (Simperfit) #24751
Miscellaneous
- [Lock] Add a TTL to refresh lock (jderusse) #26232
- [Monolog] Add a Monolog activation strategy for ignoring specific HTTP codes (simshaun, fabpot) #23707
- [LDAP] Allow adding and removing values to/from multi-valued attributes (jean-gui) #21856
- [BrowserKit] Add a way to switch to ajax for one request (Simperfit) #24778
- [HttpKernel] Add Kernel::getAnnotatedClassesToCompile() (nicolas-grekas) #27168
- [HttpKernel] LoggerDataCollector: splitting logs on different sub-requests (vtsykun) #23659
- [HttpKernel] Make session-related services extra-lazy (nicolas-grekas) #25836
- [Intl] Add polyfill for Locale::canonicalize() (nicolas-grekas) #26152
- [Translation] Added support for name on the unit node (Nyholm) #26149
- [PropertyInfo] Add hassers for accessors prefixes (sebdec) #23617
- Unwrap errors in FlattenException (derrabus) #26028
- More compact display of vendor code in exception pages (javiereguiluz) #26671
- Add clean option to assets install command (robinlehrmann) #24216
You can read more about this new version by reading the Living on the Edge articles on 4.1 on this blog. Also read the UPGRADE guide for Symfony 4.1.
Want to upgrade to this new release? Fortunately, because Symfony protects backwards-compatibility very closely, this should be quite easy. Read our upgrade documentation to learn more.
Want to be notified whenever a new Symfony release is published? Or when a version is not maintained anymore? Or only when a security issue is fixed? Consider subscribing to the Symfony Roadmap Notifications.
This is an amazing release full of great big and small new features. Thanks to all the contributors and the community!
Love it!
Awesome! 😍
First Symfony 4.1 site out : https://github.com/Cryde/insult.es 😂 😂
The feature to ignore specific HTTP codes in Monolog is only available in MonologBundle 3.3 which hasn't been released yet, so you can't use it yet. Maybe remove it from this 'curated' list?