New in Symfony 6.4: DX Improvements (part 1)
November 27, 2023 • Published by Javier Eguiluz
Symfony 6.4 is backed by:
ISO 3166-1 Numeric Codes Support
The Intl component provides access to the 2-letter and 3-letter alphabetic codes that represent countries, dependent territories, and special areas of geographical interest. However, the alphabetic codes use the 26-letter English alphabet, which might be unavailable or difficult to use for people and systems using non-Latin scripts (e.g. Arabic or Japanese).
That's why in Symfony 6.4 we're adding support also for the ISO 3166-1 numeric standard,
which represent each country/territory with a 3-digit integer. For example,
Singapore is SG
(ISO 3166-1 alpha-2), SGP
(3166-1 alpha-3) and 702
(ISO 3166-1 numeric).
Improve Type
Constraint
The Type constraint validates that the given value is of a specific data type
(e.g. callable
, numeric
, countable
, double
, etc.) In Symfony 6.4
we're improving it with three new types:
finite-float
;number
, a finite or infinite integer or float;finite-number
, a finite integer or float.
You can combine these new types with any of the other existing types:
1 2
#[Assert\Type(['int', 'finite-float'])]
private $value;
Custom Precision when Formatting Time Messages in Console
The time formatting utilities provided by the Console component are useful to display the elapsed or remaining time in progress bars, etc. In Symfony 6.4 we're improving those utilities so you can set the precision used to render the time. This precision is an integer that tells how many parts of the time (days, hours, etc.) should be displayed.
1 2 3 4
Helper::formatTime(172799, 1); // 1 day
Helper::formatTime(172799, 2); // 1 day, 23 hrs
Helper::formatTime(172799, 3); // 1 day, 23 hrs, 59 mins
Helper::formatTime(172799, 4); // 1 day, 23 hrs, 59 mins, 59 secs
Early Directory Pruning
The Finder component provides many utilities to find files and directories
based on certain conditions. One of those utilities is the filter()
method,
which allows to exclude directories from the result.
In Symfony 6.4 we're adding a second optional argument to filter()
which allows
you to prune directories early instead of excluding them. This can improve performance
significantly because pruning means that those directories are completely skipped
instead of traversing the entire file/directory structure and excluding them later.
New Methods to Render Blocks from Controllers
The AbstractController class in an optional base controller that provides utilities commonly needed in your own controllers. In Symfony 6.4 we're improving it with two new methods:
renderBlock()
, renders the given Twig block from a template and returns aResponse
object;renderBlockView()
, renders the given Twig block from a template and returns the contents as a string variable.
These methods come in handy e.g. when generating turbo stream responses:
1 2 3 4 5 6 7
// Before
return new Response(
$this->container->get('twig')->load('foo.html.twig')->renderBlock('the_block', $context)
);
// After
return $this->renderBlock('foo.html.twig', 'the_block', $context);
Help the Symfony project!
As with any Open-Source project, contributing code or documentation is the most common way to help, but we also have a wide range of sponsoring opportunities.
Comments are closed.
To ensure that comments stay relevant, they are closed for old posts.