New in Symfony 7.2: Misc. Improvements (Part 1)


The New in Symfony 7.2 blog series showcases the main new features introduced
in Symfony 7.2. This two-part blog post is the last in the series and highlights
some miscellaneous minor changes and improvements.

Custom Message Retry Delay

Contributed by
Valtteri R
in
#57915

When using the Messenger component, you can throw a RecoverableMessageHandlingException
to force retrying a message an unlimited number of times. In Symfony 7.2,
you can pass a custom retry delay to the constructor of that exception. This is
useful, for example, when retrying an HTTP request that included a Retry-After
response header.

Better Coalesce Support in Expressions

Contributed by
Adam Kiss
in
#54757

The ExpressionLanguage component supports the null-coalesce operator (foo ?? 'no',
foo.baz ?? foo['baz'] ?? 'no', etc.) However, unlike PHP's equivalent operator,
it throws an exception when trying to access a non-existent variable.
We improved this in Symfony 7.2, and the null-coalesce operator now behaves exactly
the same as the PHP operator.

Passing Custom Attributes to Passports via User Login

Contributed by
Alexandre Daubois
in
#58166

When using the login() method to login users programmatically, you can pass
different options:

use Symfony\Bundle\SecurityBundle\Security;
// ...

class SomeController
{
public function someAction(Security $security): Response
{
// ...

// log the user in on the current firewall
$security->login($user);

// log in on a different firewall...
$security->login($user, 'form_login', 'other_firewall');

// add badges...
$security->login($user, 'form_login', 'other_firewall', [(new RememberMeBadge())->enable()]);

// ...
}
}

In Symfony 7.2, you can also define custom attributes to pass to the passport:

// the attributes will be added to the user passport
$security->login($user, attributes: ['referer' => 'https://oauth.example.com']);

Add calendar Option to DateType

Contributed by
Alexandre Daubois
in
#57960

In PHP, the IntlCalendar class allows you to select any of the calendars defined
in the ICU library and also define your own calendar tweaks. In Symfony 7.2,
we've improved the DateType form field to allow passing a custom calendar via
the new calendar option.

Force Color in Console Output

Contributed by
Artfaith
in
#57777

In Symfony 4.4, we added support for the NO_COLOR env var as a way to disable
console output coloring in an industry-standard manner. In Symfony 7.2, we're adding
support for the opposite env var called FORCE_COLOR.
Set this env var with a non-empty value, and components like Console,
PhpUnitBridge, and VarDumper will output colored content.

Support Virtual Properties in VarDumper

Contributed by
Alexandre Daubois
in
#57833

One of the main new features of PHP 8.4 is property hooks, which allow class
properties to define additional logic associated with their get and set operations:

class VirtualHookedClass
{
public string $firstName = 'John';
private string $lastName = 'Doe';

public string $fullName {
get {
return $this->firstName.' '.$this->lastName;
}
}

private $untypedFullName {
get {
return $this->firstName.' '.$this->lastName;
}
}
}

In Symfony 7.2, we added support for property hooks when using the VarDumper component
to dump the object contents. While the hook value won't be shown (to avoid running
the logic inside it), you'll see their names and types:

Sponsor the Symfony project.