Structured MIME Suffix Support
Although common MIME types are simple (text/css, application/javascript),
sometimes you have to deal with more complex MIME types that include subtypes.
These are defined in RFC 2045 and look like application/hal+xml or
application/device-config+tlv.
In Symfony 7.4, we improved the getFormat() method of the Request class
so you get more accurate formats when providing a complex MIME type with
subtypes. This feature is available through a new boolean parameter (false
by default to keep backward compatibility). Set it to true to try to extract
the format from the subtype when no match is found using the full MIME type:
1 2
$request->getFormat('application/device-config+tlv', true);
// returns 'tlv'
MicrosoftGraph Mailer Integration
Symfony provides built-in integration with 18 mailer services such as Azure, Amazon SES, Mailgun, and Mandrill. In Symfony 7.4, we are adding a new integration with the Microsoft Graph API Email endpoint.
Untranslated Messages
In many Symfony applications, it is common to have code like this:
1 2 3 4 5
if ($message instanceof Translatable) {
$message->trans($translator);
} else {
$translator->trans($message, domain: 'SomeBundle');
}
This means that Translatable objects are always translated, as they usually
should be. However, sometimes you might have special messages that should remain
invariant or have already been translated outside Symfony. In those cases, you
can use the new StaticMessage class, which implements TranslatableInterface
but does not perform any translation:
1 2 3 4 5 6 7 8 9
$message = new TranslatableMessage('Symfony is great');
$message->trans($translator, 'es');
// 'Symfony es genial'
use Symfony\Component\Translation\StaticMessage;
$message = new StaticMessage('Symfony is great');
$message->trans($translator, 'es');
// 'Symfony is great'
New Email Assert
Symfony provides tens of custom PHPUnit assertions such as
assertResponseHasHeader() and assertPageTitleContains() to simplify
common tests in Symfony web applications.
In Symfony 7.4, we added a new assertion called assertEmailAddressNotContains(),
which complements the existing assertEmailAddressContains(). It checks that
the given email address is not included in a specific header of an email message:
1
$this->assertEmailAddressNotContains($email, 'To', 'test@test.com');
Profiling EventSource Requests
The Symfony profiler is an essential tool that lets you inspect and debug any
aspect of the current request(s). In Symfony 7.4, we improved the Ajax panel so
it not only captures and profiles Ajax requests but also requests triggered by
JavaScript's EventSource (Server-Sent Events).
You will now see these requests as event-stream entries in the web debug toolbar:
This is the last blog post in the New in Symfony 7.4 series. We hope you enjoyed reading it and that you upgrade your Symfony applications soon. Meanwhile, work on Symfony 8.1 has already begun in preparation for its release in May 2026.