The Form component is one of the most solid components of Symfony. It's so mature and stable that it no longer adds many new features. However, in Symfony 6.3 we improved it with some minor new features.

Improved Handling of Seconds in Date/Time Fields

Thomas Calvet
Contributed by Thomas Calvet in #50059

The with_seconds option of fields like DateTimeType and TimeType tells Symfony whether to include seconds in the input. When the form field doesn't have any data, this option shows/hides the seconds.

However, when the field has some data, the seconds are always shown because of how the date/time values are handled.

In Symfony 6.3, this option will always work as expected regardless of the field data.

HTML5 Date/Time Widgets by Default

Matthieu Lempereur
Contributed by Matthieu Lempereur in #49588

The html5 option of date fields tells Symfony to use a native HTML5 widget to render date/time fields. However, setting it to true is not enough to see those native widgets. You also have to set the widget option to single_text.

However, because of Symfony Backward Compatibility Promise we can't just change the default value of that widget option because it'd break some applications. Instead, in Symfony 6.3 we're deprecating not setting a value for this option. This way, all applications must make a conscious decision about which value to use in that widget option.

This will allow us to make single_text the default value of widget in Symfony 7.0 (released in November 2023) to completely finish this improvement.

Choice Placeholder Attributes

Jordane VASPARD
Contributed by Jordane VASPARD in #48343

The ChoiceType field and all its related fields (Country, Currency, Locale, Language, Entity, etc.) define a placeholder option to display the common "Choose an option" empty option at the top of the list of options.

In Symfony 6.3 we're adding a new placeholder_attr option so you can customize this placeholder (e.g. to display it disabled, to add HTML attributes to it, etc.):

1
2
3
4
5
6
7
8
9
10
11
12
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...

$builder->add('fruits', ChoiceType::class, [
    // ...
    'placeholder' => '...',
    'placeholder_attr' => [
        'title' => 'Choose an option',
        'disabled' => true,
        'data-some-custom-attribute' => 'foo',
    ],
]);
Published in #Living on the edge