<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
>
    <channel>
        <title>Symfony Blog</title>
        <atom:link href="https://feeds.feedburner.com/symfony/blog" rel="self" type="application/rss+xml" />
        <link>https://symfony.com/blog/</link>
        <description>Most recent posts published on the Symfony project blog</description>
        <pubDate>Sun, 17 May 2026 22:11:06 +0200</pubDate>
        <lastBuildDate>Sun, 17 May 2026 10:12:00 +0200</lastBuildDate>
        <language>en</language>
                        <item>
            <title><![CDATA[Twig 3.25.0 released]]></title>
            <link>https://symfony.com/blog/twig-3-25-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
Twig 3.25.0 released
Twig 3.25.0 ships with a new needs_is_sandboxed option that lets
filters, functions, and tests adapt their behavior when running inside a
sandbox, makes the compiled output of templates using {% embed %}
deterministic across runs, and…</description>
            <content:encoded><![CDATA[
                                <div class="section">
<h2 id="twig-3-25-0-released"><a class="headerlink" href="#twig-3-25-0-released" title="Permalink to this headline">Twig 3.25.0 released</a></h2>
<p>Twig 3.25.0 ships with a new <code translate="no" class="notranslate">needs_is_sandboxed</code> option that lets
filters, functions, and tests adapt their behavior when running inside a
sandbox, makes the compiled output of templates using <code translate="no" class="notranslate">{% embed %}</code>
deterministic across runs, and removes a long-standing limitation that
prevented overriding <code translate="no" class="notranslate">EscaperRuntime</code> via a custom runtime loader.</p>
<div class="section">
<h3 id="sandbox-aware-filters-functions-and-tests"><a class="headerlink" href="#sandbox-aware-filters-functions-and-tests" title="Permalink to this headline">Sandbox-aware filters, functions, and tests</a></h3>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/fabpot">
                <img src="https://github.com/fabpot.png" alt="Fabien Potencier">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/fabpot">Fabien Potencier</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/twigphp/Twig/pull/4800">#4800</a>
                                                </span>
            </div>
</div>
<p>Until now, a Twig callable had no built-in way to know whether the template
calling it was running in a sandbox. Filters, functions, and tests that
needed to behave differently in trusted versus untrusted contexts had to
inspect the environment manually and replicate the sandbox detection logic.</p>
<p>Twig 3.25 introduces a new <code translate="no" class="notranslate">needs_is_sandboxed</code> option. When set to
<code translate="no" class="notranslate">true</code>, Twig passes the current sandbox state as a boolean to the
callable, after the charset, the environment, and the context if those are
also requested:</p>
<div translate="no" data-loc="9" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-keyword">use</span> <span class="hljs-title">Twig</span>\<span class="hljs-title">TwigFilter</span>;

<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>filter</span> = <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">TwigFilter</span>(<span class="hljs-string">'rot13'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-params">(<span class="hljs-keyword">bool</span> <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>sandboxed</span>, <span class="hljs-keyword">string</span> <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>text</span>)</span> </span>{
    if (<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>sandboxed</span>) {
        <span class="hljs-comment">// adjust the behavior when running in a sandboxed template</span>
    }

    <span class="hljs-keyword">return</span> <span class="hljs-title invoke__">str_rot13</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>text</span>);
}, [<span class="hljs-string">'needs_is_sandboxed'</span> =&gt; <span class="hljs-keyword">true</span>]);</code></pre>
    </div>
</div>
<p>The same option is available on <code translate="no" class="notranslate">TwigFunction</code> and <code translate="no" class="notranslate">TwigTest</code>, and on
the <code translate="no" class="notranslate">#[AsTwigFilter]</code>, <code translate="no" class="notranslate">#[AsTwigFunction]</code>, and <code translate="no" class="notranslate">#[AsTwigTest]</code>
attributes via a <code translate="no" class="notranslate">needsIsSandboxed</code> named argument.</p>
<p>The flag reflects the effective sandbox state for the current template
source, so it correctly accounts for both the global sandbox state and any
<code translate="no" class="notranslate">SourcePolicy</code> you may have configured.</p>
</div>
<div class="section">
<h3 id="deterministic-embed-classes"><a class="headerlink" href="#deterministic-embed-classes" title="Permalink to this headline">Deterministic embed classes</a></h3>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/itsalmostchristmas">
                <img src="https://github.com/itsalmostchristmas.png" alt="Emma">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/itsalmostchristmas">Emma</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/twigphp/Twig/pull/4797">#4797</a>
                                                </span>
            </div>
</div>
<p>Templates using <code translate="no" class="notranslate">{% embed %}</code> now produce stable compiled output across
runs, which makes it possible to ship reproducible, pre-compiled Twig
builds. No change is required on your side.</p>
</div>
<div class="section">
<h3 id="overridable-escaperruntime"><a class="headerlink" href="#overridable-escaperruntime" title="Permalink to this headline">Overridable <code translate="no" class="notranslate">EscaperRuntime</code></a></h3>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/GromNaN">
                <img src="https://github.com/GromNaN.png" alt="Jérôme Tamarelle">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/GromNaN">Jérôme Tamarelle</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/twigphp/Twig/pull/4795">#4795</a>
                                                </span>
            </div>
</div>
<p>You can now substitute your own <code translate="no" class="notranslate">EscaperRuntime</code> implementation through
any runtime loader, including <code translate="no" class="notranslate">FactoryRuntimeLoader</code> and Symfony's
<code translate="no" class="notranslate">ContainerRuntimeLoader</code>:</p>
<div translate="no" data-loc="9" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-keyword">use</span> <span class="hljs-title">Twig</span>\<span class="hljs-title">Environment</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Twig</span>\<span class="hljs-title">Loader</span>\<span class="hljs-title">ArrayLoader</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Twig</span>\<span class="hljs-title">Runtime</span>\<span class="hljs-title">EscaperRuntime</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Twig</span>\<span class="hljs-title">RuntimeLoader</span>\<span class="hljs-title">FactoryRuntimeLoader</span>;

<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>twig</span> = <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">Environment</span>(<span class="hljs-keyword">new</span> <span class="hljs-title invoke__">ArrayLoader</span>());
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>twig</span>-&gt;<span class="hljs-title invoke__">addRuntimeLoader</span>(<span class="hljs-keyword">new</span> <span class="hljs-title invoke__">FactoryRuntimeLoader</span>([
    EscaperRuntime::<span class="hljs-variable language_">class</span> =&gt; static <span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-params">()</span> =&gt;</span> <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">MyEscaperRuntime</span>(),
]));</code></pre>
    </div>
</div>
<p>Symfony 8.1's TwigBundle already builds on this: <code translate="no" class="notranslate">EscaperRuntime</code> is
now registered as the <code translate="no" class="notranslate">twig.runtime.escaper</code> service, and a new
<code translate="no" class="notranslate">twig.safe_class</code> resource tag lets any bundle mark a class as safe
without having to decorate the environment configurator:</p>
<div translate="no" data-loc="2" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>services</span>-&gt;<span class="hljs-title invoke__">set</span>(InvoiceNumber::<span class="hljs-variable language_">class</span>)
    -&gt;<span class="hljs-title invoke__">resourceTag</span>(<span class="hljs-string">'twig.safe_class'</span>, [<span class="hljs-string">'strategy'</span> =&gt; <span class="hljs-string">'html'</span>]);</code></pre>
    </div>
</div>
</div>
<div class="section">
<h3 id="full-changelog"><a class="headerlink" href="#full-changelog" title="Permalink to this headline">Full Changelog</a></h3>
<ul>
    <li><a href="https://github.com/twigphp/Twig/pull/4795" class="reference external" rel="external noopener noreferrer" target="_blank">#4795</a> Lazy load <code translate="no" class="notranslate">EscaperRuntime</code> in <code translate="no" class="notranslate">EscaperExtension</code> (@GromNaN)</li>
<li><a href="https://github.com/twigphp/Twig/pull/4800" class="reference external" rel="external noopener noreferrer" target="_blank">#4800</a> Add a <code translate="no" class="notranslate">needs_is_sandboxed</code> option for filters, functions, and tests (@fabpot)</li>
<li><a href="https://github.com/twigphp/Twig/pull/4797" class="reference external" rel="external noopener noreferrer" target="_blank">#4797</a> Make embeds deterministic (@itsalmostchristmas)</li>
</ul>
</div>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/twig-3-25-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Sun, 17 May 2026 10:12:00 +0200</pubDate>
            <comments>https://symfony.com/blog/twig-3-25-0-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[A Week of Symfony #1011 (May 11–17, 2026)]]></title>
            <link>https://symfony.com/blog/a-week-of-symfony-1011-may-11-17-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>This week, Symfony published maintenance versions 6.4.39, 7.4.11, and 8.0.11. In addition, we announced the second beta release of Symfony 8.1. Finally, we shared the schedule for the SymfonyOnline June 2026 conference and more details about SymfonyDay Montreal…</description>
            <content:encoded><![CDATA[
                                <p>This week, Symfony published maintenance versions <a href="https://symfony.com/blog/symfony-6-4-39-released">6.4.39</a>, <a href="https://symfony.com/blog/symfony-7-4-11-released">7.4.11</a>, and <a href="https://symfony.com/blog/symfony-8-0-11-released">8.0.11</a>. In addition, we announced the <a href="https://symfony.com/blog/symfony-8-1-0-beta2-released">second beta release of Symfony 8.1</a>. Finally, we shared <a href="https://symfony.com/blog/symfonyonline-june-2026-the-schedule-is-live">the schedule</a> for the SymfonyOnline June 2026 conference and more details about <a href="https://live.symfony.com/2026-montreal/">SymfonyDay Montreal 2026</a>.</p>

<h2>Symfony development highlights</h2>

<p>This week, 51 pull requests were merged (42 in code and 9 in docs) and 34 issues were closed (29 in code and 5 in docs). Excluding merges, 23 authors made additions and deletions. See details for <a href="https://github.com/symfony/symfony/pulse">code</a> and <a href="https://github.com/symfony/symfony-docs/pulse">docs</a>.</p>

<p><a href="https://github.com/symfony/symfony/commits/6.4">6.4 changelog</a>:</p>

<ul>
<li><a href="https://github.com/symfony/symfony/commit/76acf566f9a53a4214c48fa68a2cd18b4f2c7e60">76acf56</a>: &#91;Security&#93; clarify AbstractToken's role-name decoupling and simplify ContextListener</li>
<li><a href="https://github.com/symfony/symfony/commit/4a804c512064fa07dd326f6aa36581a2514de6d2">4a804c5</a>: &#91;Dotenv&#93; don't truncate OS env vars containing $ when $_ENV is unpopulated</li>
<li><a href="https://github.com/symfony/symfony/commit/35e877961cdd24e20318236fc35177c8b6c88300">35e8779</a>: &#91;WebProfilerBundle&#93; don't try to access RawMessage::$headers</li>
<li><a href="https://github.com/symfony/symfony/commit/cafeaa2de601f3dd714a910c504ce85275cd1cc6">cafeaa2</a>: &#91;HttpKernel&#93; use backend-handled request for terminate listeners in HttpCache</li>
<li><a href="https://github.com/symfony/symfony/commit/f36fbca68535a9b3c2182dc259a6343112d8fc10">f36fbca</a>: &#91;Messenger&#93; drop trace args from FlattenException normalization</li>
<li><a href="https://github.com/symfony/symfony/commit/6e49223e8bde90807a2a1e961003c975a9f005e1">6e49223</a>: &#91;Scheduler&#93; use stored checkpoint as base date for debug:scheduler</li>
<li><a href="https://github.com/symfony/symfony/commit/cbb5873dedb7d968a814722a6d8e571b8244f11e">cbb5873</a>: &#91;Console&#93; make ConsoleSectionOutput::overwrite() atomic to fix sections + ProgressIndicator clear</li>
<li><a href="https://github.com/symfony/symfony/commit/78fb4f20b6ccedd08cc6f352b6c4a22f762613c5">78fb4f2</a>: &#91;Filesystem&#93; preserve source mode when copying files</li>
<li><a href="https://github.com/symfony/symfony/commit/de84d0094fadc8cb54a9ac7c9b2bc5047100bb5a">de84d00</a>: &#91;Process&#93; ignore array env values before proc_open</li>
<li><a href="https://github.com/symfony/symfony/commit/aa86748a3bd162e02906d1d6251cb8f339858587">aa86748</a>: &#91;Security&#93; preserve webserver base URL in HttpUtils::createRequest()</li>
<li><a href="https://github.com/symfony/symfony/commit/de4b320bfb8891a478d5a53892dd9e818252c274">de4b320</a>: &#91;Console&#93; fix signal handler scoping</li>
<li><a href="https://github.com/symfony/symfony/commit/57fafa5d86f7404c307d7f7fbd8334313f151a70">57fafa5</a>: &#91;AssetMapper&#93; warn on missing bare CSS and JSON imports</li>
<li><a href="https://github.com/symfony/symfony/commit/b6a9d3902bf42098281f667b3b28cf7026af75eb">b6a9d39</a>: &#91;Messenger&#93; fix support for RabbitMQ v4 by adding delayed quorum queues</li>
<li><a href="https://github.com/symfony/symfony/commit/55a39e2ef6381ddd854877d39cdc4ed2246372ba">55a39e2</a>: &#91;Notifier&#93; use hash_equals() to compare webhook signatures for Vonage</li>
<li><a href="https://github.com/symfony/symfony/commit/0e24c673b7f0ffe58671bf81d4e876be0d591f82">0e24c67</a>: &#91;String&#93; fixed singularize traces > trace in inflector</li>
<li><a href="https://github.com/symfony/symfony/commit/1a4066e137206567992def3b6495fa586538c597">1a4066e</a>: &#91;Yaml&#93; reject non-stringables when using "!!binary"</li>
<li><a href="https://github.com/symfony/symfony/commit/6548e65e223cd219c25c3bfa1d1aa71d613bd963">6548e65</a>: &#91;Security&#93; remove the legacy nested unserialize() call from token and exception classes</li>
<li><a href="https://github.com/symfony/symfony/commit/97267d7ce9483d8be0b3086f8138581ab7a582cc">97267d7</a>: &#91;FrameworkBundle&#93; bump Request/Session value resolver priority above EntityValueResolver</li>
<li><a href="https://github.com/symfony/symfony/commit/40c0f8bcdeea52ca65c305bcc3efb8fca0b3f130">40c0f8b</a>: &#91;SecurityBundle&#93; allow defining security provider factories without config</li>
<li><a href="https://github.com/symfony/symfony/commit/7aedb9f2b9f23a9cc3e845a25570a511d7f4f06c">7aedb9f</a>: &#91;HttpFoundation&#93; remove wrong documentation about the configurability of trusted proxies</li>
<li><a href="https://github.com/symfony/symfony/commit/8efd73501e5a1fea42adbeabc0fea3f308dd8fd6">8efd735</a>: &#91;HttpKernel&#93; preserve named-attribute override on Request/Session value resolvers</li>
</ul>

<p><a href="https://github.com/symfony/symfony/commits/7.4">7.4 changelog</a>:</p>

<ul>
<li><a href="https://github.com/symfony/symfony/commit/66e1cbdfeef03fe941c1e9955fb7b2ccf0f82b4b">66e1cbd</a>: &#91;Mailer&#93; use hash_equals() to compare webhook signatures for AhaSend</li>
<li><a href="https://github.com/symfony/symfony/commit/35dc5cc8b3b55f91929ace3fc5416b066fe76f5c">35dc5cc</a>: &#91;Messenger&#93; ensure SigningSerializer won't decode before verifying the signature</li>
<li><a href="https://github.com/symfony/symfony/commit/37891372169b3553dd6d721accbd3c89ced8870f">3789137</a>: &#91;Security&#93; fix impersonation being deauthenticated on every request</li>
</ul>

<p><a href="https://github.com/symfony/symfony/commits/8.1">8.1 changelog</a>:</p>

<ul>
<li><a href="https://github.com/symfony/symfony/commit/f589b60fb4d29b5506d173154da4540ca0063d6e">f589b60</a>: &#91;Console&#93; add missing symfony/polyfill-php85 dependency</li>
<li><a href="https://github.com/symfony/symfony/commit/af12d1554f793e9de9d8c97e91a9fdb2e50865dd">af12d15</a>: &#91;Messenger&#93; add delayed quorum queues in Amqp</li>
<li><a href="https://github.com/symfony/symfony/commit/12baa3720475d5735775a2999826f24c61855e1b">12baa37</a>: &#91;Yaml&#93; emit {} instead of {  } when dumping an empty map</li>
<li><a href="https://github.com/symfony/symfony/commit/8139923d589f5be5f76e8c60b29c113b8b7db2de">8139923</a>: &#91;HttpClient&#93; log stale-if-error fallback in CachingHttpClient</li>
<li><a href="https://github.com/symfony/symfony/commit/5e5fff8bc1292694d409faf93cbfbcceca768929">5e5fff8</a>: &#91;HttpClient&#93; add $allowList argument to NoPrivateNetworkHttpClient</li>
<li><a href="https://github.com/symfony/symfony/commit/923c07f6fd60c67aca3125bf659cb2bba6248e6a">923c07f</a>: &#91;Validator&#93; add findByCodes() to ConstraintViolationListInterface</li>
<li><a href="https://github.com/symfony/symfony/commit/140dfb36e6b8bc2ad8bc57b2c163acce6a8f074d">140dfb3</a>: &#91;Form&#93; fix array_flip() warning in expanded+multiple ChoiceType on partial submit</li>
<li><a href="https://github.com/symfony/symfony/commit/90759e844112d1c24e2c3d84a84228eff5e8d8f3">90759e8</a>: &#91;HttpClient&#93; add custom DNS resolution using a decorator</li>
<li><a href="https://github.com/symfony/symfony/commit/dd1be775c070a790f71f0e73397e88a6da5ec499">dd1be77</a>: &#91;Messenger&#93; allow to respect retry strategy with RecoverableMessageHandlingException</li>
<li><a href="https://github.com/symfony/symfony/commit/7a1e1c892b773484a525a8bb911ffe4703586b68">7a1e1c8</a>: &#91;HttpFoundation&#93; add missing @throws tag to BinaryFileResponse constructor</li>
<li><a href="https://github.com/symfony/symfony/commit/c1dd42178b5d726861cd6c63874464c81f69da86">c1dd421</a>: &#91;Console&#93; sort command alternatives by name</li>
<li><a href="https://github.com/symfony/symfony/commit/b01d14a27dcd5ca91c5af11ca3cb41ffbe639de7">b01d14a</a>: &#91;Runtime&#93; fix TypeError when resolving untyped arguments</li>
</ul>

<h2>Newest issues and pull requests</h2>

<ul>
<li><a href="https://github.com/symfony/symfony/pull/64218">[Tui] Add KeyBindingWidget</a></li>
<li><a href="https://github.com/symfony/symfony/pull/64219">[DoctrineBridge][Messenger] Allow using middlewares without the ORM</a></li>
<li><a href="https://github.com/symfony/symfony/pull/64190">[JsonStreamer] add a format_variant option to the generated cache file name</a></li>
<li><a href="https://github.com/symfony/symfony/pull/64185">[FrameworkBundle] Configure caches via DSN</a></li>
<li><a href="https://github.com/symfony/symfony/pull/64210">[HttpKernel][WebProfilerBundle] Add dump icon in result list</a></li>
</ul>

<h2>Symfony Jobs</h2>

<p>These are some of the most recent Symfony job offers:</p>

<ul>
<li><strong>DevOps for a Symfony project</strong> at Cloudpepper<br>
Full-time - $150,000 – $180,000 / year<br>
Full remote<br>
<a href="https://symfony.com/jobs/a9262d7">View details</a></li>
<li><strong>Lead Symfony Developer</strong> at SCTR Services<br>
Full-time - $70,000 – $110,000 / year<br>
Full remote<br>
<a href="https://symfony.com/jobs/81ee1d5">View details</a></li>
<li><strong>Symfony Developer</strong> at Design Force Marketing<br>
Full-time - $60,000 – $100,000 / year<br>
Grand Haven Michigan, United States<br>
<a href="https://symfony.com/jobs/5ad3b96">View details</a></li>
<li><strong>Backend Symfony Developer</strong> at ShipMonk<br>
Contract / Freelance - $5,000 – $8,000 / month<br>
Full remote<br>
<a href="https://symfony.com/jobs/2bb5783">View details</a></li>
<li><strong>Backend Symfony Developer</strong> at Vacatia<br>
Full-time - $150,000 – $180,000 / year<br>
Remote + part-time onsite (Portland, Oregon, United States)<br>
<a href="https://symfony.com/jobs/8844fec">View details</a></li>
</ul>

<p>You can <a href="https://symfony.com/jobs">publish a Symfony job offer for free</a> on symfony.com.</p>

<h2>SymfonyCasts Updates</h2>

<p><a href="https://symfonycasts.com/">SymfonyCasts</a> is the official way to learn Symfony.
Select a track for a guided path through 100+ video tutorial courses about
Symfony, PHP and JavaScript.</p>

<p>This week, SymfonyCasts published the following updates:</p>

<ul>
<li>(Article) <a href="https://symfonycasts.com/blog/deprecations-explained">Symfony Deprecations Explained (Upgrade Without Breaking Things)</a></li>
<li>(Video) <a href="https://symfonycasts.com/screencast/symfony8-upgrade/deprecations">Upgrading to Symfony 8: Tracking &amp; Fixing Deprecations</a></li>
</ul>

<h2>They talked about us</h2>

<ul>
<li><a href="https://dev.to/mattleads/benchmarking-symfony-81s-native-deepcloner-vs-manual-serialization-3440">Benchmarking Symfony 8.1’s Native DeepCloner vs. Manual Serialization</a></li>
<li><a href="https://dev.to/tito10047/asset-mapper-vs-20-year-old-legacy-code-the-ultimate-boss-fight-1bc2">Asset Mapper vs. 20-Year-Old Legacy Code: The Ultimate Boss Fight</a></li>
<li><a href="https://medium.com/the-sensiolabs-tech-blog/create-a-custom-builder-a-gotenbergbundle-story-77593c9e5cc4">Create a custom builder — A GotenbergBundle story</a></li>
<li><a href="https://tomasvotruba.com/blog/alice-nelmio-hautelook-faker-and-how-to-upgrade-doctrine-fixtures-part-3">Alice, Nelmio, Hautelook, Faker - How to Upgrade Doctrine Fixtures - Part 3</a></li>
<li><a href="https://dev.to/ohugonnot/docker-symfony-wsl2-the-3-first-day-problems-49d1">Docker + Symfony + WSL2: the 3 first-day problems</a></li>
<li><a href="https://medium.com/@bartosz_94857/make-windows-trust-the-symfony-clis-https-running-in-wsl2-b21094c36d06">Make Windows trust the Symfony CLI's https running in WSL2</a></li>
<li><a href="https://medium.com/@ahmedbhs/9-la-testabilit%C3%A9-et-la-pyramide-des-tests-lusage-des-repositories-in-memory-pour-des-tests-ffdba41a6bc0">La Testabilité et la Pyramide des Tests : L’usage des repositories “In-Memory” pour des tests ultra-rapides</a></li>
<li><a href="https://medium.com/@ahmedbhs/10-easyadmin-et-ddd-le-compromis-pragmatique-pour-int%C3%A9grer-un-outil-crud-sans-polluer-le-domaine-8efdc40be9a1">EasyAdmin et DDD : Le compromis pragmatique pour intégrer un outil CRUD sans polluer le domaine</a></li>
<li><a href="https://www.php-entwickler.de/gehalt/php-entwickler-2026">Der große PHP Gehaltsreport 2026</a></li>
</ul>

<h2>Upcoming Symfony Events</h2>

<ul>
<li><a href="https://www.meetup.com/de-de/sfugberlin/events/314559077/">Nothing Shared, Everything Gained by Kore Nordmann</a>: Berlin, Germany (May 19, 2026)</li>
<li><a href="https://www.meetup.com/symfony-php-meetup-barcelona-by-sensiolabs/events/313664247/">Symfony/PHP Meetup Barcelona by SensioLabs</a>: Barcelona, Spain (June 25, 2026)</li>
<li><a href="https://websummercamp.com/2026">Web Summer Camp 2026</a>: Opatija, Croatia (July 2, 2026 – July 4, 2026)</li>
</ul>

<h2>Call to Action</h2>

<ul>
<li>Follow Symfony <a href="https://x.com/symfony">on X</a>, <a href="https://mastodon.social/@symfony">on Mastodon</a>, <a href="https://bsky.app/profile/symfony.com">on Bluesky</a> and <a href="https://www.threads.net/@symfony">on Threads</a> and share this article.</li>
<li><a href="https://feeds.feedburner.com/symfony/blog">Subscribe to the Symfony blog RSS</a> and never miss a Symfony story again.</li>
</ul>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/a-week-of-symfony-1011-may-11-17-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Javier Eguiluz ]]></dc:creator>
            <pubDate>Sun, 17 May 2026 09:14:00 +0200</pubDate>
            <comments>https://symfony.com/blog/a-week-of-symfony-1011-may-11-17-2026?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[SymfonyDay Montreal 2026: Symfony 8: The Hexagonal Track]]></title>
            <link>https://symfony.com/blog/symfonyday-montreal-2026-symfony-8-the-hexagonal-track?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


SymfonyDay Montreal 2026 is happening on June 4 at L&#039;Espace Quartier Latin (UQAM). It&#039;s the perfect opportunity to sharpen your skills and meet the core team in Canada!

🎤 Speaker announcement!

We are thrilled to host Robin Chalas, CEO &amp;amp; Co-Founder,…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-montreal/">
    <img src="https://symfony.com/uploads/assets/blog/HEADER-1200x440px-at-3x-5.png" alt="Header 1200X440Px At 3X 5">
</a></p>

<p><strong><a href="https://live.symfony.com/2026-montreal/">SymfonyDay Montreal 2026</a></strong> is happening on June 4 at L'Espace Quartier Latin (UQAM). It's the perfect opportunity to sharpen your skills and meet the core team in Canada!</p>

<h2>🎤 Speaker announcement!</h2>

<p>We are thrilled to host <strong><a href="https://connect.symfony.com/profile/chalasr">Robin Chalas</a></strong>, CEO &amp; Co-Founder, baksla.sh, for his talk <strong>"<a href="https://live.symfony.com/2026-montreal/schedule/symfony-8-the-hexagonal-track">Symfony 8: The Hexagonal Track</a>"</strong>:</p>

<p>Structuring an application around its domain rather than its framework is an old idea. Making it practical has sometimes felt like swimming against the current.</p>

<p>Thanks to the way Symfony 8 leverages modern PHP, this drastically changes. Recent evolutions in both the language and the framework align naturally with hexagonal thinking and tactical DDD patterns — no workarounds, no fighting the tools.</p>

<p>Join me as I wear both my Core Team member and DDD practitioner hats to give a pragmatic look at putting your business logic first, building applications that scale with your domain's complexity and remain maintainable as they grow, with Symfony's blessing.</p>

<p>👉 Discover more talks by reading the <strong><a href="https://live.symfony.com/2026-montreal/schedule">full schedule</a></strong></p>

<p><a class="block text-center" href="https://live.symfony.com/2026-montreal/" title="Nl Blog Banner Symfonyday">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-SymfonyDay.jpg" alt="Nl Blog Banner Symfonyday">
</a></p>

<h3>🎟️ Register Now</h3>

<p>Limited seating available! Make sure to <strong><a href="https://live.symfony.com/2026-montreal/registration">register here</a></strong> to join the gathering.</p>

<h3>📍 Our Venue: L’Espace Quartier Latin</h3>

<p>We are gathering at <strong><a href="https://maps.app.goo.gl/KV48kYKqY7hu982q9">L’Espace Quartier Latin</a></strong> at UQAM! The venue is extremely easy to reach, both by public transport and by private transport.</p>

<h3>🤲 L’apéro – Let’s Celebrate Together</h3>

<p>After a full day of learning, it’s time to relax. We invite all attendees to join us for a community drink in the evening thanks to <strong><a href="https://pimcore.com/fr/">Pimcore</a></strong>'s support. It’s a wonderful opportunity to chat with the speakers, meet fellow developers, and enjoy the unique Montreal atmosphere. <em>Santé !</em></p>

<p>We can’t wait to see you on <strong>June 4th!</strong></p>

<hr />

<h3>Join us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfonyday-montreal-2026-symfony-8-the-hexagonal-track?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Eloïse Charrier ]]></dc:creator>
            <pubDate>Fri, 15 May 2026 13:30:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfonyday-montreal-2026-symfony-8-the-hexagonal-track?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[New in Symfony 8.1: Translation Improvements]]></title>
            <link>https://symfony.com/blog/new-in-symfony-8-1-translation-improvements?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 8.1 brings several improvements to the translation system: broader
XLIFF format support, a more flexible enabled_locales configuration, a
better translated placeholder for expanded choice fields, and a new helper
class to compute locale fallback chains.…</description>
            <content:encoded><![CDATA[
                                <p>Symfony 8.1 brings several improvements to the <a href="https://symfony.com/translation" class="reference external">translation</a> system: broader
XLIFF format support, a more flexible <code translate="no" class="notranslate">enabled_locales</code> configuration, a
better translated placeholder for expanded choice fields, and a new helper
class to compute locale fallback chains.</p>
<div class="section">
<h2 id="using-environment-variables-in-enabled-locales"><a class="headerlink" href="#using-environment-variables-in-enabled-locales" title="Permalink to this headline">Using Environment Variables in Enabled Locales</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://connect.symfony.com/profile/nicolas-grekas">
                <img src="https://connect.symfony.com/profile/nicolas-grekas.picture" alt="Nicolas Grekas">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://connect.symfony.com/profile/nicolas-grekas">Nicolas Grekas</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/symfony/pull/63121">#63121</a>
                                                </span>
            </div>
</div>
<p>The <a href="https://symfony.com/doc/current/reference/configuration/framework.html#enabled-locales" class="reference external">framework.enabled_locales</a> configuration option used to require a
hard-coded list of locales. In Symfony 8.1 you can use environment variables
in this list directly. Empty values are filtered out automatically, so you can
declare a fixed number of slots and leave some of them empty:</p>
<div translate="no" data-loc="7" class="notranslate codeblock codeblock-length-sm codeblock-yaml">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-comment"># config/packages/translation.yaml</span>
<span class="hljs-attr">framework:</span>
    <span class="hljs-attr">enabled_locales:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-string">'%env(LOCALE_1)%'</span>
        <span class="hljs-bullet">-</span> <span class="hljs-string">'%env(LOCALE_2)%'</span>
        <span class="hljs-bullet">-</span> <span class="hljs-string">'%env(LOCALE_3)%'</span>
        <span class="hljs-bullet">-</span> <span class="hljs-string">'%env(LOCALE_4)%'</span></code></pre>
    </div>
</div>
<p>This is useful when the list of enabled locales depends on the deployment
environment. For example, different tenants may enable different subsets of
languages without requiring a separate configuration file per environment.</p>
</div>
<div class="section">
<h2 id="translated-placeholder-on-expanded-choice-fields"><a class="headerlink" href="#translated-placeholder-on-expanded-choice-fields" title="Permalink to this headline">Translated Placeholder on Expanded Choice Fields</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://github.com/eyupcanakman">
                <img src="https://github.com/eyupcanakman.png" alt="Eyüp Can Akman">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://github.com/eyupcanakman">Eyüp Can Akman</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/symfony/pull/63727">#63727</a>
                                                </span>
            </div>
</div>
<p>When a <code translate="no" class="notranslate">ChoiceType</code> is rendered as a group of radio buttons or checkboxes
(<code translate="no" class="notranslate">expanded: true</code>), its <code translate="no" class="notranslate">placeholder</code> label used the <a href="https://symfony.com/doc/current/reference/forms/types/choice.html#choice-translation-domain" class="reference external">choice_translation_domain</a>
option for translation.</p>
<p>This caused problems with <a href="https://symfony.com/doc/current/reference/forms/types/entity.html" class="reference external">EntityType</a>, whose <code translate="no" class="notranslate">choice_translation_domain</code>
defaults to <code translate="no" class="notranslate">false</code>. As a result, <code translate="no" class="notranslate">TranslatableMessage</code> placeholders were
never translated even when an explicit <code translate="no" class="notranslate">translation_domain</code> was configured.</p>
<p>In Symfony 8.1, placeholders for expanded choice fields now use
<code translate="no" class="notranslate">translation_domain</code>, matching the behavior of non-expanded <code translate="no" class="notranslate">&lt;select&gt;</code> fields:</p>
<div translate="no" data-loc="10" class="notranslate codeblock codeblock-length-md codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Translation</span>\<span class="hljs-title">TranslatableMessage</span>;
<span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Bridge</span>\<span class="hljs-title">Doctrine</span>\<span class="hljs-title">Form</span>\<span class="hljs-title">Type</span>\<span class="hljs-title">EntityType</span>;

<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>form</span> = <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>this</span>-&gt;<span class="hljs-title invoke__">createForm</span>(EntityType::<span class="hljs-variable language_">class</span>, <span class="hljs-keyword">null</span>, [
    <span class="hljs-string">'class'</span> =&gt; Country::<span class="hljs-variable language_">class</span>,
    <span class="hljs-string">'expanded'</span> =&gt; <span class="hljs-keyword">true</span>,
    <span class="hljs-comment">// this placeholder is now translated using the 'forms' domain.</span>
    <span class="hljs-string">'placeholder'</span> =&gt; <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">TranslatableMessage</span>(<span class="hljs-string">'select_a_country'</span>, [], <span class="hljs-string">'forms'</span>),
    <span class="hljs-string">'translation_domain'</span> =&gt; <span class="hljs-string">'forms'</span>,
]);</code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="new-localefallbackprovider-class"><a class="headerlink" href="#new-localefallbackprovider-class" title="Permalink to this headline">New <code translate="no" class="notranslate">LocaleFallbackProvider</code> Class</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://connect.symfony.com/profile/mpdude">
                <img src="https://connect.symfony.com/profile/mpdude.picture" alt="Matthias Pigulla">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://connect.symfony.com/profile/mpdude">Matthias Pigulla</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/symfony/pull/45553">#45553</a>
                                                </span>
            </div>
</div>
<p>Applications with many regional locales often need to compute locale fallback
chains consistently across different services and components.</p>
<p>Symfony resolves these fallback chains by following ICU parent mappings,
shortening locale sub-tags, and finally appending any configured fallback
locales. Until now, this logic lived inside the <code translate="no" class="notranslate">Translator</code> class.</p>
<p>In Symfony 8.1, this logic is extracted into a dedicated reusable
<code translate="no" class="notranslate">LocaleFallbackProvider</code> class:</p>
<div translate="no" data-loc="5" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-keyword">use</span> <span class="hljs-title">Symfony</span>\<span class="hljs-title">Component</span>\<span class="hljs-title">Translation</span>\<span class="hljs-title">LocaleFallbackProvider</span>;

<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>provider</span> = <span class="hljs-keyword">new</span> <span class="hljs-title invoke__">LocaleFallbackProvider</span>([<span class="hljs-string">'en'</span>]);
<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>fallbacks</span> = <span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>provider</span>-&gt;<span class="hljs-title invoke__">computeFallbackLocales</span>(<span class="hljs-string">'es_AR'</span>);
<span class="hljs-comment">// ['es_419', 'es', 'en']</span></code></pre>
    </div>
</div>
<p>The class also provides a static helper to validate locale strings. It throws
an <code translate="no" class="notranslate">InvalidArgumentException</code> when the locale contains invalid characters:</p>
<div translate="no" data-loc="1" class="notranslate codeblock codeblock-length-sm codeblock-php">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code>LocaleFallbackProvider::<span class="hljs-title invoke__">validateLocale</span>(<span class="hljs-variable"><span class="hljs-variable-other-marker">$</span>locale</span>);</code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="support-for-xliff-versions-2-1-and-2-2"><a class="headerlink" href="#support-for-xliff-versions-2-1-and-2-2" title="Permalink to this headline">Support for XLIFF Versions 2.1 and 2.2</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://connect.symfony.com/profile/alexandre-daubois">
                <img src="https://connect.symfony.com/profile/alexandre-daubois.picture" alt="Alexandre Daubois">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://connect.symfony.com/profile/alexandre-daubois">Alexandre Daubois</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/symfony/pull/63455">#63455</a>
                                                </span>
            </div>
</div>
<p>Symfony previously accepted only XLIFF 1.2 and 2.0 files. Translation files
declaring <code translate="no" class="notranslate">version="2.1"</code> or <code translate="no" class="notranslate">version="2.2"</code> were rejected even though
their structure is fully compatible with XLIFF 2.0.</p>
<p>This could become an issue when using newer localization platforms or
translation tooling that already generate XLIFF 2.1 or 2.2 files by default.
Symfony 8.1 now accepts these newer version numbers transparently:</p>
<div translate="no" data-loc="12" class="notranslate codeblock codeblock-length-md codeblock-xml">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xliff</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"urn:oasis:names:tc:xliff:document:2.0"</span>
    <span class="hljs-attr">version</span>=<span class="hljs-string">"2.2"</span> <span class="hljs-attr">srcLang</span>=<span class="hljs-string">"en"</span> <span class="hljs-attr">trgLang</span>=<span class="hljs-string">"fr"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">file</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"f1"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">unit</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"welcome"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">segment</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">source</span>&gt;</span>Welcome<span class="hljs-tag">&lt;/<span class="hljs-name">source</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">target</span>&gt;</span>Bienvenue<span class="hljs-tag">&lt;/<span class="hljs-name">target</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">segment</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">unit</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">file</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xliff</span>&gt;</span></code></pre>
    </div>
</div>
</div>
<div class="section">
<h2 id="support-for-xliff-pgs-module"><a class="headerlink" href="#support-for-xliff-pgs-module" title="Permalink to this headline">Support for XLIFF PGS Module</a></h2>
<div class="blog-post-contributor-info">
    <div class="blog-post-contributor-avatar">
                    <a target="_blank" href="https://connect.symfony.com/profile/alexandre-daubois">
                <img src="https://connect.symfony.com/profile/alexandre-daubois.picture" alt="Alexandre Daubois">
            </a>
            </div>
    <div class="blog-post-contributor-contents">
        <span>Contributed by</span>
                    <a target="_blank" class="blog-post-contributor-name" href="https://connect.symfony.com/profile/alexandre-daubois">Alexandre Daubois</a>
                                        <span class="blog-post-contributor-prs"> in
                                    <a target="_blank" href="https://github.com/symfony/symfony/pull/63465">#63465</a>
                                                </span>
            </div>
</div>
<p>XLIFF 2.2 introduces the <a href="https://docs.oasis-open.org/xliff/xliff-core/v2.2/xliff-extended-v2.2-part2.html#plural_gender_select_module" class="reference external" rel="external noopener noreferrer" target="_blank">PGS module</a> (Plural, Gender and Select), which
allows translators to express plural, gender, and select variations directly
inside XLIFF files.</p>
<p>Symfony 8.1 understands these attributes, converts them internally to ICU
MessageFormat, and registers the result in the <code translate="no" class="notranslate">+intl-icu</code> translation
domain. This means the translations work transparently with <code translate="no" class="notranslate">trans()</code>:</p>
<div translate="no" data-loc="21" class="notranslate codeblock codeblock-length-md codeblock-xml">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">xliff</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"urn:oasis:names:tc:xliff:document:2.0"</span>
    <span class="hljs-attr">xmlns:pgs</span>=<span class="hljs-string">"urn:oasis:names:tc:xliff:pgs:1.0"</span>
    <span class="hljs-attr">version</span>=<span class="hljs-string">"2.2"</span> <span class="hljs-attr">srcLang</span>=<span class="hljs-string">"en"</span> <span class="hljs-attr">trgLang</span>=<span class="hljs-string">"fr"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">file</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"f1"</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">unit</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"file_deleted"</span> <span class="hljs-attr">pgs:switch</span>=<span class="hljs-string">"plural:file_count"</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">segment</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"s1"</span> <span class="hljs-attr">pgs:case</span>=<span class="hljs-string">"0"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">source</span>&gt;</span>You deleted no file.<span class="hljs-tag">&lt;/<span class="hljs-name">source</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">target</span>&gt;</span>Vous n'avez supprimé aucun fichier.<span class="hljs-tag">&lt;/<span class="hljs-name">target</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">segment</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">segment</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"s2"</span> <span class="hljs-attr">pgs:case</span>=<span class="hljs-string">"1"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">source</span>&gt;</span>You deleted one file.<span class="hljs-tag">&lt;/<span class="hljs-name">source</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">target</span>&gt;</span>Vous avez supprimé un fichier.<span class="hljs-tag">&lt;/<span class="hljs-name">target</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">segment</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">segment</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"s3"</span> <span class="hljs-attr">pgs:case</span>=<span class="hljs-string">"other"</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">source</span>&gt;</span>You deleted <span class="hljs-tag">&lt;<span class="hljs-name">ph</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"1"</span> <span class="hljs-attr">disp</span>=<span class="hljs-string">"file_count"</span>/&gt;</span> files.<span class="hljs-tag">&lt;/<span class="hljs-name">source</span>&gt;</span>
                <span class="hljs-tag">&lt;<span class="hljs-name">target</span>&gt;</span>Vous avez supprimé <span class="hljs-tag">&lt;<span class="hljs-name">ph</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"1"</span> <span class="hljs-attr">disp</span>=<span class="hljs-string">"file_count"</span>/&gt;</span> fichiers.<span class="hljs-tag">&lt;/<span class="hljs-name">target</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">segment</span>&gt;</span>
        <span class="hljs-tag">&lt;/<span class="hljs-name">unit</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">file</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xliff</span>&gt;</span></code></pre>
    </div>
</div>
<p>The <code translate="no" class="notranslate">pgs:switch</code> attribute defines the variable name and switch type
(<code translate="no" class="notranslate">plural</code>, <code translate="no" class="notranslate">gender</code>, or <code translate="no" class="notranslate">select</code>), while each <code translate="no" class="notranslate">&lt;segment&gt;</code> uses
<code translate="no" class="notranslate">pgs:case</code> to match a value.</p>
<p>You can also combine multiple switches in a single attribute. For example,
<code translate="no" class="notranslate">pgs:switch="gender:host_gender plural:guest_count"</code>. Symfony automatically
nests the generated ICU structures as needed.</p>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/new-in-symfony-8-1-translation-improvements?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Javier Eguiluz ]]></dc:creator>
            <pubDate>Thu, 14 May 2026 09:55:00 +0200</pubDate>
            <comments>https://symfony.com/blog/new-in-symfony-8-1-translation-improvements?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony 8.1.0-BETA2 released]]></title>
            <link>https://symfony.com/blog/symfony-8-1-0-beta2-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 8.1.0-BETA2 has just been released.
This is a pre-release version of Symfony 8.1. If you want to test it
in your own applications before its final release, run the following commands:

        
        1
2
3
        $ composer config minimum-stability…</description>
            <content:encoded><![CDATA[
                                <p><a href="#Symfony%208.1.0-BETA2" class="reference internal">Symfony 8.1.0-BETA2</a> has just been released.</p>
<p>This is a pre-release version of Symfony 8.1. If you want to test it
in your own applications before its final release, run the following commands:</p>
<div translate="no" data-loc="3" class="notranslate codeblock codeblock-length-sm codeblock-terminal codeblock-bash">
        <div class="codeblock-scroll">
        
        <pre class="codeblock-code"><code><span class="hljs-prompt">$ </span>composer config minimum-stability beta
<span class="hljs-prompt">$ </span>composer config extra.symfony.require <span class="hljs-string">"8.1.*"</span>
<span class="hljs-prompt">$ </span>composer update</code></pre>
    </div>
</div>
<p>These commands assume that all your Symfony dependencies in <code translate="no" class="notranslate">composer.json</code>
use <code translate="no" class="notranslate">*</code> as their version constraint. Otherwise, you will need to update
the version constraints of those Symfony dependencies to <code translate="no" class="notranslate">8.1.*</code>.</p>
<p>Read the <a href="https://symfony.com/doc/current/setup/upgrade_major.html" class="reference external">Symfony upgrade guide</a> to learn more about upgrading Symfony
and use the <a href="https://insight.symfony.com/" class="reference external">SymfonyInsight upgrade reports</a> to detect the code you will
need to change in your project.</p>
<div class="admonition admonition-tip ">
    <p class="admonition-title">
                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg>
                <span>Tip</span>
    </p><p>Want to be notified whenever a new Symfony release is published? Or when a
version is not maintained anymore? Or only when a security issue is fixed?
Consider <a href="https://symfony.com/account/notifications" class="reference external">subscribing to the Symfony Roadmap Notifications</a>.</p>
</div>
<div class="section">
<h2 id="changelog-since-symfony-8-1-0-beta1"><a class="headerlink" href="#changelog-since-symfony-8-1-0-beta1" title="Permalink to this headline">Changelog Since Symfony 8.1.0-BETA1</a></h2>
<ul>
    <li>data <a href="https://github.com/symfony/symfony/pull/64203" class="reference external" rel="external noopener noreferrer" target="_blank">#64203</a> Release v8.1.0-BETA2</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64198" class="reference external" rel="external noopener noreferrer" target="_blank">#64198</a> [SecurityBundle] Allow defining security provider factories without config (@hockdudu)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64189" class="reference external" rel="external noopener noreferrer" target="_blank">#64189</a> [FrameworkBundle] Bump Request/Session value resolver priority above EntityValueResolver (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64197" class="reference external" rel="external noopener noreferrer" target="_blank">#64197</a> [Messenger] Ensure SigningSerializer won't decode before verifying the signature (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64195" class="reference external" rel="external noopener noreferrer" target="_blank">#64195</a> [Security] Remove the legacy nested unserialize() call from token and exception classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64196" class="reference external" rel="external noopener noreferrer" target="_blank">#64196</a> [Yaml] Reject non-stringables when using "!!binary" (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64191" class="reference external" rel="external noopener noreferrer" target="_blank">#64191</a> [Inflector][String] Fixed singularize traces &gt; trace (@ruudk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64192" class="reference external" rel="external noopener noreferrer" target="_blank">#64192</a> [Mailer] Use hash_equals() to compare webhook signatures for AhaSend (@alexandre-daubois)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64193" class="reference external" rel="external noopener noreferrer" target="_blank">#64193</a> [Notifier] Use hash_equals() to compare webhook signatures for Vonage (@alexandre-daubois)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64180" class="reference external" rel="external noopener noreferrer" target="_blank">#64180</a> [Messenger][Amqp] Fix support for RabbitMQ v4 by adding delayed quorum queues (@Jean85)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64187" class="reference external" rel="external noopener noreferrer" target="_blank">#64187</a> [AssetMapper] Warn on missing bare CSS and JSON imports (@ousamabenyounes)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/61936" class="reference external" rel="external noopener noreferrer" target="_blank">#61936</a> [Messenger] Allow to respect retry strategy with RecoverableMessageHandlingException (@VincentLanglet)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64182" class="reference external" rel="external noopener noreferrer" target="_blank">#64182</a> [Console] Fix signal handler scoping (@jpollard3)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64181" class="reference external" rel="external noopener noreferrer" target="_blank">#64181</a> [Security] Preserve webserver base URL in HttpUtils::createRequest() (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64058" class="reference external" rel="external noopener noreferrer" target="_blank">#64058</a> [Process] Ignore array env values before proc_open (@dionisvl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64179" class="reference external" rel="external noopener noreferrer" target="_blank">#64179</a> [Filesystem] preserve source mode when copying files (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64176" class="reference external" rel="external noopener noreferrer" target="_blank">#64176</a> [Console] Make ConsoleSectionOutput::overwrite() atomic to fix sections + ProgressIndicator clear (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/63770" class="reference external" rel="external noopener noreferrer" target="_blank">#63770</a> [HttpClient] Add custom DNS resolution using a decorator (@peter17)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64158" class="reference external" rel="external noopener noreferrer" target="_blank">#64158</a> [Form] Fix array_flip() warning in expanded+multiple ChoiceType on partial submit (@SAY-5)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64156" class="reference external" rel="external noopener noreferrer" target="_blank">#64156</a> [Validator] Add findByCodes() to ConstraintViolationListInterface (@michaelthieulin)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64160" class="reference external" rel="external noopener noreferrer" target="_blank">#64160</a> [HttpClient] Add $allowList argument to NoPrivateNetworkHttpClient (@Amoifr)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/64163" class="reference external" rel="external noopener noreferrer" target="_blank">#64163</a> [HttpClient] Log stale-if-error fallback in CachingHttpClient (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64174" class="reference external" rel="external noopener noreferrer" target="_blank">#64174</a> [Scheduler] Use stored checkpoint as base date for <a href="debug:scheduler" class="reference internal">debug:scheduler</a> (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64153" class="reference external" rel="external noopener noreferrer" target="_blank">#64153</a> [Messenger] Drop trace args from FlattenException normalization (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64150" class="reference external" rel="external noopener noreferrer" target="_blank">#64150</a> [HttpKernel] Use backend-handled request for terminate listeners in HttpCache (@Toflar)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64172" class="reference external" rel="external noopener noreferrer" target="_blank">#64172</a> [WebProfilerBundle] Don’t try to access RawMessage::$headers (@MatTheCat)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64148" class="reference external" rel="external noopener noreferrer" target="_blank">#64148</a> [Dotenv] Don't truncate OS env vars containing $ when $_ENV is unpopulated (@HMAZonderland)</li>
<li>feature <a href="https://github.com/symfony/symfony/pull/60298" class="reference external" rel="external noopener noreferrer" target="_blank">#60298</a> [Messenger][Amqp] delayed quorum queues (Miquel Fontana, @miquel-angel)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64167" class="reference external" rel="external noopener noreferrer" target="_blank">#64167</a> [Console] Add missing symfony/polyfill-php85 dependency (@Amoifr)</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64146" class="reference external" rel="external noopener noreferrer" target="_blank">#64146</a> Release v6.4.38</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64145" class="reference external" rel="external noopener noreferrer" target="_blank">#64145</a> Release v8.0.10</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64144" class="reference external" rel="external noopener noreferrer" target="_blank">#64144</a> Release v7.4.10</li>
</ul>
<span id="Symfony 8.1.0-BETA2"></span>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-8-1-0-beta2-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Wed, 13 May 2026 20:41:28 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-8-1-0-beta2-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony 8.0.11 released]]></title>
            <link>https://symfony.com/blog/symfony-8-0-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 8.0.11 has just been released.
Read the Symfony upgrade guide to learn more about upgrading Symfony
and use the SymfonyInsight upgrade reports to detect the code you will
need to change in your project.

    
                    
                Tip…</description>
            <content:encoded><![CDATA[
                                <p><a href="#Symfony%208.0.11" class="reference internal">Symfony 8.0.11</a> has just been released.</p>
<p>Read the <a href="https://symfony.com/doc/current/setup/upgrade_major.html" class="reference external">Symfony upgrade guide</a> to learn more about upgrading Symfony
and use the <a href="https://insight.symfony.com/" class="reference external">SymfonyInsight upgrade reports</a> to detect the code you will
need to change in your project.</p>
<div class="admonition admonition-tip ">
    <p class="admonition-title">
                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg>
                <span>Tip</span>
    </p><p>Want to be notified whenever a new Symfony release is published? Or when a
version is not maintained anymore? Or only when a security issue is fixed?
Consider <a href="https://symfony.com/account/notifications" class="reference external">subscribing to the Symfony Roadmap Notifications</a>.</p>
</div>
<div class="section">
<h2 id="changelog-since-symfony-8-0-10"><a class="headerlink" href="#changelog-since-symfony-8-0-10" title="Permalink to this headline">Changelog Since Symfony 8.0.10</a></h2>
<ul>
    <li>data <a href="https://github.com/symfony/symfony/pull/64202" class="reference external" rel="external noopener noreferrer" target="_blank">#64202</a> Release v8.0.11</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64198" class="reference external" rel="external noopener noreferrer" target="_blank">#64198</a> [SecurityBundle] Allow defining security provider factories without config (@hockdudu)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64189" class="reference external" rel="external noopener noreferrer" target="_blank">#64189</a> [FrameworkBundle] Bump Request/Session value resolver priority above EntityValueResolver (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64197" class="reference external" rel="external noopener noreferrer" target="_blank">#64197</a> [Messenger] Ensure SigningSerializer won't decode before verifying the signature (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64195" class="reference external" rel="external noopener noreferrer" target="_blank">#64195</a> [Security] Remove the legacy nested unserialize() call from token and exception classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64196" class="reference external" rel="external noopener noreferrer" target="_blank">#64196</a> [Yaml] Reject non-stringables when using "!!binary" (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64191" class="reference external" rel="external noopener noreferrer" target="_blank">#64191</a> [Inflector][String] Fixed singularize traces &gt; trace (@ruudk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64192" class="reference external" rel="external noopener noreferrer" target="_blank">#64192</a> [Mailer] Use hash_equals() to compare webhook signatures for AhaSend (@alexandre-daubois)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64193" class="reference external" rel="external noopener noreferrer" target="_blank">#64193</a> [Notifier] Use hash_equals() to compare webhook signatures for Vonage (@alexandre-daubois)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64180" class="reference external" rel="external noopener noreferrer" target="_blank">#64180</a> [Messenger][Amqp] Fix support for RabbitMQ v4 by adding delayed quorum queues (@Jean85)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64187" class="reference external" rel="external noopener noreferrer" target="_blank">#64187</a> [AssetMapper] Warn on missing bare CSS and JSON imports (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64182" class="reference external" rel="external noopener noreferrer" target="_blank">#64182</a> [Console] Fix signal handler scoping (@jpollard3)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64181" class="reference external" rel="external noopener noreferrer" target="_blank">#64181</a> [Security] Preserve webserver base URL in HttpUtils::createRequest() (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64058" class="reference external" rel="external noopener noreferrer" target="_blank">#64058</a> [Process] Ignore array env values before proc_open (@dionisvl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64179" class="reference external" rel="external noopener noreferrer" target="_blank">#64179</a> [Filesystem] preserve source mode when copying files (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64176" class="reference external" rel="external noopener noreferrer" target="_blank">#64176</a> [Console] Make ConsoleSectionOutput::overwrite() atomic to fix sections + ProgressIndicator clear (@Amoifr)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64174" class="reference external" rel="external noopener noreferrer" target="_blank">#64174</a> [Scheduler] Use stored checkpoint as base date for <a href="debug:scheduler" class="reference internal">debug:scheduler</a> (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64153" class="reference external" rel="external noopener noreferrer" target="_blank">#64153</a> [Messenger] Drop trace args from FlattenException normalization (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64150" class="reference external" rel="external noopener noreferrer" target="_blank">#64150</a> [HttpKernel] Use backend-handled request for terminate listeners in HttpCache (@Toflar)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64172" class="reference external" rel="external noopener noreferrer" target="_blank">#64172</a> [WebProfilerBundle] Don’t try to access RawMessage::$headers (@MatTheCat)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64148" class="reference external" rel="external noopener noreferrer" target="_blank">#64148</a> [Dotenv] Don't truncate OS env vars containing $ when $_ENV is unpopulated (@HMAZonderland)</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64146" class="reference external" rel="external noopener noreferrer" target="_blank">#64146</a> Release v6.4.38</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64144" class="reference external" rel="external noopener noreferrer" target="_blank">#64144</a> Release v7.4.10</li>
</ul>
<span id="Symfony 8.0.11"></span>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-8-0-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Wed, 13 May 2026 20:23:23 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-8-0-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony 7.4.11 released]]></title>
            <link>https://symfony.com/blog/symfony-7-4-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 7.4.11 has just been released.
Read the Symfony upgrade guide to learn more about upgrading Symfony
and use the SymfonyInsight upgrade reports to detect the code you will
need to change in your project.

    
                    
                Tip…</description>
            <content:encoded><![CDATA[
                                <p><a href="#Symfony%207.4.11" class="reference internal">Symfony 7.4.11</a> has just been released.</p>
<p>Read the <a href="https://symfony.com/doc/current/setup/upgrade_major.html" class="reference external">Symfony upgrade guide</a> to learn more about upgrading Symfony
and use the <a href="https://insight.symfony.com/" class="reference external">SymfonyInsight upgrade reports</a> to detect the code you will
need to change in your project.</p>
<div class="admonition admonition-tip ">
    <p class="admonition-title">
                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg>
                <span>Tip</span>
    </p><p>Want to be notified whenever a new Symfony release is published? Or when a
version is not maintained anymore? Or only when a security issue is fixed?
Consider <a href="https://symfony.com/account/notifications" class="reference external">subscribing to the Symfony Roadmap Notifications</a>.</p>
</div>
<div class="section">
<h2 id="changelog-since-symfony-7-4-10"><a class="headerlink" href="#changelog-since-symfony-7-4-10" title="Permalink to this headline">Changelog Since Symfony 7.4.10</a></h2>
<ul>
    <li>data <a href="https://github.com/symfony/symfony/pull/64201" class="reference external" rel="external noopener noreferrer" target="_blank">#64201</a> Release v7.4.11</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64198" class="reference external" rel="external noopener noreferrer" target="_blank">#64198</a> [SecurityBundle] Allow defining security provider factories without config (@hockdudu)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64189" class="reference external" rel="external noopener noreferrer" target="_blank">#64189</a> [FrameworkBundle] Bump Request/Session value resolver priority above EntityValueResolver (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64197" class="reference external" rel="external noopener noreferrer" target="_blank">#64197</a> [Messenger] Ensure SigningSerializer won't decode before verifying the signature (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64195" class="reference external" rel="external noopener noreferrer" target="_blank">#64195</a> [Security] Remove the legacy nested unserialize() call from token and exception classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64196" class="reference external" rel="external noopener noreferrer" target="_blank">#64196</a> [Yaml] Reject non-stringables when using "!!binary" (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64191" class="reference external" rel="external noopener noreferrer" target="_blank">#64191</a> [Inflector][String] Fixed singularize traces &gt; trace (@ruudk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64192" class="reference external" rel="external noopener noreferrer" target="_blank">#64192</a> [Mailer] Use hash_equals() to compare webhook signatures for AhaSend (@alexandre-daubois)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64193" class="reference external" rel="external noopener noreferrer" target="_blank">#64193</a> [Notifier] Use hash_equals() to compare webhook signatures for Vonage (@alexandre-daubois)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64180" class="reference external" rel="external noopener noreferrer" target="_blank">#64180</a> [Messenger][Amqp] Fix support for RabbitMQ v4 by adding delayed quorum queues (@Jean85)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64187" class="reference external" rel="external noopener noreferrer" target="_blank">#64187</a> [AssetMapper] Warn on missing bare CSS and JSON imports (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64182" class="reference external" rel="external noopener noreferrer" target="_blank">#64182</a> [Console] Fix signal handler scoping (@jpollard3)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64181" class="reference external" rel="external noopener noreferrer" target="_blank">#64181</a> [Security] Preserve webserver base URL in HttpUtils::createRequest() (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64058" class="reference external" rel="external noopener noreferrer" target="_blank">#64058</a> [Process] Ignore array env values before proc_open (@dionisvl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64179" class="reference external" rel="external noopener noreferrer" target="_blank">#64179</a> [Filesystem] preserve source mode when copying files (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64176" class="reference external" rel="external noopener noreferrer" target="_blank">#64176</a> [Console] Make ConsoleSectionOutput::overwrite() atomic to fix sections + ProgressIndicator clear (@Amoifr)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64174" class="reference external" rel="external noopener noreferrer" target="_blank">#64174</a> [Scheduler] Use stored checkpoint as base date for <a href="debug:scheduler" class="reference internal">debug:scheduler</a> (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64153" class="reference external" rel="external noopener noreferrer" target="_blank">#64153</a> [Messenger] Drop trace args from FlattenException normalization (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64150" class="reference external" rel="external noopener noreferrer" target="_blank">#64150</a> [HttpKernel] Use backend-handled request for terminate listeners in HttpCache (@Toflar)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64172" class="reference external" rel="external noopener noreferrer" target="_blank">#64172</a> [WebProfilerBundle] Don’t try to access RawMessage::$headers (@MatTheCat)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64148" class="reference external" rel="external noopener noreferrer" target="_blank">#64148</a> [Dotenv] Don't truncate OS env vars containing $ when $_ENV is unpopulated (@HMAZonderland)</li>
<li>data <a href="https://github.com/symfony/symfony/pull/64146" class="reference external" rel="external noopener noreferrer" target="_blank">#64146</a> Release v6.4.38</li>
</ul>
<span id="Symfony 7.4.11"></span>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-7-4-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Wed, 13 May 2026 20:05:48 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-7-4-11-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[Symfony 6.4.39 released]]></title>
            <link>https://symfony.com/blog/symfony-6-4-39-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>Symfony 6.4.39 has just been released.
Read the Symfony upgrade guide to learn more about upgrading Symfony
and use the SymfonyInsight upgrade reports to detect the code you will
need to change in your project.

    
                    
                Tip…</description>
            <content:encoded><![CDATA[
                                <p><a href="#Symfony%206.4.39" class="reference internal">Symfony 6.4.39</a> has just been released.</p>
<p>Read the <a href="https://symfony.com/doc/current/setup/upgrade_major.html" class="reference external">Symfony upgrade guide</a> to learn more about upgrading Symfony
and use the <a href="https://insight.symfony.com/" class="reference external">SymfonyInsight upgrade reports</a> to detect the code you will
need to change in your project.</p>
<div class="admonition admonition-tip ">
    <p class="admonition-title">
                    <svg xmlns="http://www.w3.org/2000/svg" fill="none" width="24" height="24" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path></svg>
                <span>Tip</span>
    </p><p>Want to be notified whenever a new Symfony release is published? Or when a
version is not maintained anymore? Or only when a security issue is fixed?
Consider <a href="https://symfony.com/account/notifications" class="reference external">subscribing to the Symfony Roadmap Notifications</a>.</p>
</div>
<div class="section">
<h2 id="changelog-since-symfony-6-4-38"><a class="headerlink" href="#changelog-since-symfony-6-4-38" title="Permalink to this headline">Changelog Since Symfony 6.4.38</a></h2>
<ul>
    <li>data <a href="https://github.com/symfony/symfony/pull/64200" class="reference external" rel="external noopener noreferrer" target="_blank">#64200</a> Release v6.4.39</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64198" class="reference external" rel="external noopener noreferrer" target="_blank">#64198</a> [SecurityBundle] Allow defining security provider factories without config (@hockdudu)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64189" class="reference external" rel="external noopener noreferrer" target="_blank">#64189</a> [FrameworkBundle] Bump Request/Session value resolver priority above EntityValueResolver (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64195" class="reference external" rel="external noopener noreferrer" target="_blank">#64195</a> [Security] Remove the legacy nested unserialize() call from token and exception classes (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64196" class="reference external" rel="external noopener noreferrer" target="_blank">#64196</a> [Yaml] Reject non-stringables when using "!!binary" (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64191" class="reference external" rel="external noopener noreferrer" target="_blank">#64191</a> [Inflector][String] Fixed singularize traces &gt; trace (@ruudk)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64193" class="reference external" rel="external noopener noreferrer" target="_blank">#64193</a> [Notifier] Use hash_equals() to compare webhook signatures for Vonage (@alexandre-daubois)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64180" class="reference external" rel="external noopener noreferrer" target="_blank">#64180</a> [Messenger][Amqp] Fix support for RabbitMQ v4 by adding delayed quorum queues (@Jean85)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64187" class="reference external" rel="external noopener noreferrer" target="_blank">#64187</a> [AssetMapper] Warn on missing bare CSS and JSON imports (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64182" class="reference external" rel="external noopener noreferrer" target="_blank">#64182</a> [Console] Fix signal handler scoping (@jpollard3)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64181" class="reference external" rel="external noopener noreferrer" target="_blank">#64181</a> [Security] Preserve webserver base URL in HttpUtils::createRequest() (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64058" class="reference external" rel="external noopener noreferrer" target="_blank">#64058</a> [Process] Ignore array env values before proc_open (@dionisvl)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64179" class="reference external" rel="external noopener noreferrer" target="_blank">#64179</a> [Filesystem] preserve source mode when copying files (@nicolas-grekas)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64176" class="reference external" rel="external noopener noreferrer" target="_blank">#64176</a> [Console] Make ConsoleSectionOutput::overwrite() atomic to fix sections + ProgressIndicator clear (@Amoifr)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64174" class="reference external" rel="external noopener noreferrer" target="_blank">#64174</a> [Scheduler] Use stored checkpoint as base date for <a href="debug:scheduler" class="reference internal">debug:scheduler</a> (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64153" class="reference external" rel="external noopener noreferrer" target="_blank">#64153</a> [Messenger] Drop trace args from FlattenException normalization (@ousamabenyounes)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64150" class="reference external" rel="external noopener noreferrer" target="_blank">#64150</a> [HttpKernel] Use backend-handled request for terminate listeners in HttpCache (@Toflar)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64172" class="reference external" rel="external noopener noreferrer" target="_blank">#64172</a> [WebProfilerBundle] Don’t try to access RawMessage::$headers (@MatTheCat)</li>
<li>bug <a href="https://github.com/symfony/symfony/pull/64148" class="reference external" rel="external noopener noreferrer" target="_blank">#64148</a> [Dotenv] Don't truncate OS env vars containing $ when $_ENV is unpopulated (@HMAZonderland)</li>
</ul>
<span id="Symfony 6.4.39"></span>
</div>
                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfony-6-4-39-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Fabien Potencier ]]></dc:creator>
            <pubDate>Wed, 13 May 2026 19:54:06 +0200</pubDate>
            <comments>https://symfony.com/blog/symfony-6-4-39-released?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
                        <item>
            <title><![CDATA[SymfonyOnline June 2026: The schedule is live!]]></title>
            <link>https://symfony.com/blog/symfonyonline-june-2026-the-schedule-is-live?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</link>
            <description>
    


The wait is over! After reviewing many high-quality proposals, we are excited to announce the schedule for SymfonyOnline June 2026, taking place online from June 11 to 12, 2026!

🙏 A huge thank you to our community

First and foremost, we want to…</description>
            <content:encoded><![CDATA[
                                <p><a class="block text-center" href="https://live.symfony.com/2026-online-june" title="Nl Blog Banner 2026 04 17T163921 336">
    <img src="https://symfony.com/uploads/assets/blog/NL-BLOG-Banner-2026-04-17T163921-336.png" alt="Nl Blog Banner 2026 04 17T163921 336">
</a></p>

<p>The wait is over! After reviewing many high-quality proposals, we are excited to announce the schedule for <strong><a href="https://live.symfony.com/2026-online-june">SymfonyOnline June 2026</a></strong>, taking place online from <strong>June 11 to 12, 2026!</strong></p>

<h3>🙏 A huge thank you to our community</h3>

<p>First and foremost, we want to thank everyone who submitted a talk during the Call for Papers. Your expertise and dedication are what keep the Symfony ecosystem thriving. While we couldn't fit every session into the schedule, the variety and depth of the topics submitted were impressive.</p>

<h3>🎤 What’s on the menu?</h3>

<p>For this 13th edition, we’ve organized the conference into two high-impact thematic tracks designed to keep you at the cutting edge of web development:</p>

<ul>
<li><strong>Day 1 - June 11: AI Track.</strong> A full day dedicated to integrating AI within PHP and Symfony applications.</li>
</ul>

<p><a href="https://live.symfony.com/2026-online-june/schedule/building-tuis-in-php-the-symfony-terminal-component">Building TUIs in PHP: The Symfony Terminal Component</a> - Fabien Potencier<br>
<a href="https://live.symfony.com/2026-online-june/schedule/symfony-ai-mate">Symfony Mate: Real Runtime Context for AI Coding Assistants</a> - Johannes Wachter<br>
<a href="https://live.symfony.com/2026-online-june/schedule/symfony-ai-in-action">Symfony AI: Platform, Agent, and Store</a> - Christopher Hertel<br>
<a href="https://live.symfony.com/2026-online-june/schedule/custom-phpstan-rules-guardrails-for-ai-assisted-symfony-code">Custom PHPStan Rules: Guardrails for AI-Assisted Symfony Code</a> - Dave Liddament<br>
<a href="https://live.symfony.com/2026-online-june/schedule/giving-voice-to-your-agents-the-symfony-ai-way">Giving voice to your agents, the Symfony AI way</a> - Guillaume Loulier<br>
<a href="https://live.symfony.com/2026-online-june/schedule/hunting-vulnerabilities-in-symfony-with-llms">Hunting Vulnerabilities in Symfony with LLMs</a> - Vincent Amstoutz<br>
<a href="https://live.symfony.com/2026-online-june/schedule/make-your-ai-useful-with-mcp">Building MCP Servers with the Official PHP SDK</a> - Tobias Nyholm<br></p>

<ul>
<li><strong>Day 2 - June 12: Symfony Deep Dive.</strong> An immersion into Symfony components and its related projects.</li>
</ul>

<p><a href="https://live.symfony.com/2026-online-june/schedule/mastering-symfony-messenger-and-rabbitmq">Event Streaming with Symfony Messenger</a> - Max Beckers<br>
<a href="https://live.symfony.com/2026-online-june/schedule/git-but-better-an-introduction-to-jujutsu-jj">Git, But Better: An Introduction to Jujutsu (jj)</a> - Pauline Vos<br>
<a href="https://live.symfony.com/2026-online-june/schedule/from-web-to-mobile-with-symfony-and-hotwire-native">From Web to Mobile with Symfony &amp; Hotwire Native</a> - Imad Zairig<br>
<a href="https://live.symfony.com/2026-online-june/schedule/protect-your-data-with-queryable-encryption">Protect your data with Queryable Encryption</a> - Jérôme Tamarelle<br>
<a href="https://live.symfony.com/2026-online-june/schedule/symfony-8-the-hexagonal-track">Symfony 8: The Hexagonal Track</a> - Robin Chalas<br>
<a href="https://live.symfony.com/2026-online-june/schedule/reconfiguring-symfony-in-real-time-with-sidekicks">Reconfiguring Symfony in real time with sidekicks</a> - Nicolas Grekas</p>

<p>We are thrilled to welcome renowned experts who will share their latest insights and best practices with the community! 🫶</p>

<p>✨ Key Feature: All talks are pre-recorded to ensure the highest technical quality, but speakers will be joining us live to answer your questions in real-time during the dedicated Q&amp;A sessions!</p>

<h3>🛠️ Pre-conference Workshops (June 9-10)</h3>

<p>Don't forget that the conference is preceded by two days of hands-on technical workshops. These small-group sessions are the perfect opportunity to master specific Symfony features under the guidance of certified trainers: <strong><a href="https://live.symfony.com/2026-online-june/workshop">Discover the first topics!</a></strong></p>

<p>Note: Workshop spots are limited and no replays are available for these sessions to ensure an interactive learning experience.</p>

<h3>🎟️ Register now!</h3>

<p>Join the global PHP &amp; Symfony community from the comfort of your home or office by clicking <strong><a href="https://live.symfony.com/2026-online-june/registration/">here</a></strong>.</p>

<ul>
<li>▶️ <strong>Instant Replays</strong>: Missed a session? All talks are available for replay as soon as they start.</li>
<li>🆒 <strong>Accessibility</strong>: English subtitles are provided for all presentations.</li>
</ul>

<p>We look forward to seeing you online to explore the future of PHP together!</p>

<hr />

<h3>Join us online!</h3>

<p>💡Follow the "conference" blog posts to not miss anything!</p>

<p>Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎</p>

<p><a class="block text-center" href="https://linktr.ee/symfony">
   <img src="https://symfony.com/uploads/assets/blog/Banner-BLOG.png" alt="Banner Blog">
</a></p>

                <hr style="margin-bottom: 5px" />
                <div style="font-size: 90%">
                    <a href="https://symfony.com/sponsor">Sponsor</a> the Symfony project.
                </div>
            ]]></content:encoded>
            <guid isPermaLink="false">https://symfony.com/blog/symfonyonline-june-2026-the-schedule-is-live?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed</guid>
            <dc:creator><![CDATA[ Eloïse Charrier ]]></dc:creator>
            <pubDate>Wed, 13 May 2026 14:30:00 +0200</pubDate>
            <comments>https://symfony.com/blog/symfonyonline-june-2026-the-schedule-is-live?utm_source=Symfony%20Blog%20Feed&amp;utm_medium=feed#comments-list</comments>
        </item>
            </channel>
</rss>
