New in Symfony 7.1: Misc Improvements

Similar Local Selection

Contributed by
Florent Morselli

in #52986.

Symfony’s Request object provides a getPreferredLanguage() method to
select the best possible locale for the current user among the list of locales
passed to the method:

$locale = $request->getPreferredLanguage($supportedLocales) ?? $defaultLocale;

An issue with this method is that is very strict. If $supportedLocales are [‚fr_FR‘, ‚en_US‘]
and $defaultLocale is ‚en_US‘, a user sending the following HTTP header:
accept-language: ja-JP,fr_CA;q=0.7,fr;q=0.5 will be assigned en_US as the
locale. However, given that the user accepts fr_CA and fr, a better choice
would have been fr_FR.

That’s why in Symfony 7.1, this method has been improved to try a perfect match first
and then try a partial match based only on the language of the locale.

Passing no Arguments to dd() Function

Contributed by
Shamimul Alam

in #53123.

Using a tool like Xdebug is the best way to debug Symfony applications. However,
it’s also common to use the dump() and dd() functions as a quick and convenient
debugging tool. Sometimes you just want the application to stop at some point and
use something like dd(‚here‘).

It’s mandatory to pass at least one argument to dd(), even if you don’t want
to dump any variables. That’s why you pass strings like here in those cases.
In Symfony 7.1, you can omit the argument of dd() if you don’t want to dump
any variables. If you do that, instead of an error you’ll see the 🐛 emoji.

Using HTML in ChoiceType Separator

Contributed by
Mathis Boultoureau

in #52447.

In the ChoiceType field, we use ——————- as the visual separator
for preferred choices. Browsers recently improved this feature by allowing the
<hr> HTML element inside <select>. This shows a much better separator
of the select options.

That’s why in Symfony 7.1 we’re introducing two options so you can customize the
separator:

separator (defaults to ——————-) it’s the content or HTML
element used to separate options;
separator_html (defaults to false) set it to true when using an
HTML element (like <hr>) to render it instead of escaping it.

You can use them like this:

$builder->add(‚language‘, ChoiceType::class, [
‚choices‘ => [
‚English‘ => ‚en‘,
‚Spanish‘ => ‚es‘,
‚Bork‘ => ‚muppets‘,
‚Pirate‘ => ‚arr‘,
],
‚preferred_choices‘ => [‚muppets‘, ‚arr‘],
’separator‘ => ‚<hr>‘,
’separator_html‘ => true,
]);

Add a readfile() Method

Contributed by
Alexander M. Turek

in #54173.

Symfony’s Filesystem component provides platform-independent utilities for
filesystem operations and for file/directory paths manipulation. It provides a
dumpFile() method to write files but it doesn’t provide a method to read files.

You have to use the file_get_contents() function from PHP, which has issues
like returning false when there’s an error (instead of throwing an exception)
and not warning you when you pass a path to a directory instead of a file by mistake.

That’s why in Symfony 7.1, we’re adding a new readFile() method that either
returns the content of a given file or throws an IOException:

use SymfonyComponentFilesystemFilesystem;

$fs = new Filesystem();
$contents = $fs->readFile($someFilePath)

Better Email Delivery Control

Contributed by
Grégoire Pineau

in #54044.

The Mailer component provides some utilities that come in handy while developing
applications. You can use an email catcher, send test emails, disable email
delivery entirely or even force all emails to be sent to some address (so you can
debug their contents without actually sending them to the real recipients).

In Symfony 7.1, we’re improving this last feature so you can exclude some email
addresses from it via the allowed_recipients option:

# config/packages/mailer.yaml
when@dev:
framework:
mailer:
envelope:
# ALL emails will be sent to this address…
recipients: [‚[email protected]‘]
# … except those sent to these addresses
allowed_recipients:
[email protected]
# you can also use regular expressions
‚internal-.*@example.(com|fr)‘

Sponsor the Symfony project.

Symfony Blog

Read More

Latest News

PHP-Releases

PHP 8.4.1 released!

PHP 8.1.31 released!

PHP 8.3.14 released!

PHP 8.2.26 released!

Generated by Feedzy