SymfonyCon Amsterdam 2025, our next annual international Symfony conference, will take place on:
The schedule is available here, as well as the complete list of workshop topics.
Stay in the look out for more to come!👀
We’re thrilled to welcome Benjamin Eberlei (@beberlei@phpc.social), Chief Performance Detective, Tideways GmbH, as a speaker with the talk “How native lazy objects will change Doctrine and Symfony forever”
"Starting with PHP 8.4 you can implement lazy loading and proxy objects with native PHP functionality with little overhead and no code generation required. Both Doctrine and Symfony are historically using the proxy pattern with solutions and workarounds built in PHP. In this talk I will explain PHPs 8.4s native lazy objects and how it will be a game changer to both Doctrine and Symfony going forward."
🎟️ Register now and choose the ticket that suits you the best among workshop, conference and combo ticket. Check all the details and get your ticket!
🖥️ Check out the exciting 13 workshop topics on this page.
🎤 Explore the great lineup of conference talks here, featuring top-notch expert speakers as Fabien Potencier, Christopher Hertel, Robin Chalas, Tobias Nyholm, Andreas Braun, Anna Filina, Pauline Vos, Stefan Koopmanschap, Nicolas Grekas, Iain Cambridge, Sebastian Bergmann, Konrad Oboza, Alexandre Salome, Antoine Bluchet, Kévin Dunglas, Rob Allen, Mathias Arlaud, Benjamin Eberlei, Viktor Pikaev, Valentin Rusev Valentin Rusev, Romain Neutron and many others...
🫵 Participate in the Unconference track, a participant-driven format where attendees shape the content and discussions in real-time. Have a topic you're passionate about? Claim your slot by emailing us at events@symfony.com
and set the stage for an unforgettable experience. Each unconference talk lasts 20 minutes with a screen and projector available on both days.
🎉 Celebrate Symfony’s 20th Anniversary with us at the Kanarie Club! Join us for an unforgettable evening of drinks, music, and good vibes on Thursday, November 27 from 7:30 to 10:30 pm at the vibrant Kanarie Club, right in the heart of De Hallen — a lively food court with 21 amazing stands (grab your favorite bites, bring them to the Kanarie club!) Dress as you like or simply add a touch of fun!✨
💻 Save the date for the Symfony hackathon on November 29. Everyone is welcome to join the hackday! Whether you're an experienced contributor or new to the community, your participation is highly valued as it brings a fresh perspective! More details are available here. The hackathon will be hosted in Volkshotel Amsterdam from 09:30 a.m. to 3:00 p.m. CET. thanks to the support of Baksla.sh.
📖 Read our attendee guide for venue, accommodation, and transportation details.
👕 Complete your Symfony Live profile to inform us of your dietary preferences, T-shirt size and talk preferences!
Joins us online!
💡Follow the "conference" blog posts to not miss anything!
Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎
The HttpClient component provides a caching feature to avoid repeated HTTP requests for the same content. Internally, it uses the HttpCache class from the HttpKernel component:
use Symfony\Component\HttpClient\CachingHttpClient;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpKernel\HttpCache\Store;
$store = new Store('/path/to/cache/storage/');
$client = HttpClient::create();
$client = new CachingHttpClient($client, $store);
// this won't hit the network if the resource is already in the cache
$response = $client->request('GET', 'https://example.com/cacheable-resource');
In Symfony 7.4, we're revamping this feature to get rid of HttpCache, base caching on the Cache component, and make the implementation fully compliant with RFC 9111.
First, define a cache pool whose adapter is tag-aware:
# config/packages/framework.yaml
framework:
cache:
pools:
example_cache_pool:
adapter: cache.adapter.redis_tag_aware
tags: true
Then, add the new caching
option to your HTTP client to enable caching and
use the given cache pool:
# config/packages/framework.yaml
framework:
cache:
pools:
example_cache_pool:
# ...
http_client:
scoped_clients:
example.client:
base_uri: 'https://example.com'
caching:
cache_pool: example_cache_pool
That's all. Requests sent with that client are now cached according to RFC 9111.
The caching
option accepts two additional keys:
shared
: if true
(the default value), the client uses a shared cache
so cached responses can be reused across users;max_ttl
: by default, responses are cached for as long as the TTL specified
by the server. When this option is set, server-provided TTLs are capped to this value.SymfonyCon Amsterdam 2025, our next annual international Symfony conference, will take place on:
The schedule is available here, as well as the complete list of workshop topics.
Stay in the look out for more to come!👀
We’re thrilled to welcome Kévin Dunglas (@dunglas), CEO, Les-Tilleuls.coop, as a speaker with the talk “Kill the SPA!”
"Are React, Vue, or even Hotwired still essential for creating modern websites and web applications? New web projects, even those built using Symfony, tend to be systematically written as Single Page Apps. As a result, they contain a lot of JavaScript code, which often makes them unnecessarily slow and difficult to maintain. Their search engine optimization and indexing by robots powering AI chats can also be greatly degraded.
Thanks to modern CSS, however, the situation has changed: View Transitions and Speculation Rules now make it possible to achieve a UX and a perception of fluidity similar to that offered by the best SPAs, but using a “traditional” approach, without the need for JavaScript or the complexity it introduces. In concrete terms, this means that it is once again possible to use our favorite framework and its companion Twig for what they excel at: generating server-side HTML, while maintaining excellent UI and UX quality.
During this talk, I will present the architecture of a modern Symfony application that does not depend (or depends very little) on JavaScript and is not an SPA. Then I will introduce a new Symfony UX component that takes advantage of this architecture, the Mercure protocol, and FrankenPHP to offer a feature prized by front-end developers: automatic reloading of views (while preserving states) during development."
🎟️ Register now and choose the ticket that suits you the best among workshop, conference and combo ticket. Check all the details and get your ticket!
🖥️ Check out the exciting 13 workshop topics on this page.
🎤 Explore the great lineup of conference talks here, featuring top-notch expert speakers as Fabien Potencier, Christopher Hertel, Robin Chalas, Tobias Nyholm, Andreas Braun, Anna Filina, Pauline Vos, Stefan Koopmanschap, Nicolas Grekas, Iain Cambridge, Sebastian Bergmann, Konrad Oboza, Alexandre Salome, Antoine Bluchet, Kévin Dunglas, Rob Allen, Mathias Arlaud, Benjamin Eberlei, Viktor Pikaev, Valentin Rusev Valentin Rusev, Romain Neutron and many others...
🫵 Participate in the Unconference track, a participant-driven format where attendees shape the content and discussions in real-time. Have a topic you're passionate about? Claim your slot by emailing us at events@symfony.com
and set the stage for an unforgettable experience. Each unconference talk lasts 20 minutes with a screen and projector available on both days.
🎉 Celebrate Symfony’s 20th Anniversary with us at the Kanarie Club! Join us for an unforgettable evening of drinks, music, and good vibes on Thursday, November 27 from 7:30 to 10:30 pm at the vibrant Kanarie Club, right in the heart of De Hallen — a lively food court with 21 amazing stands (grab your favorite bites, bring them to the Kanarie club!) Dress as you like or simply add a touch of fun!✨
💻 Save the date for the Symfony hackathon on November 29. Everyone is welcome to join the hackday! Whether you're an experienced contributor or new to the community, your participation is highly valued as it brings a fresh perspective! More details are available here. The hackathon will be hosted in Volkshotel Amsterdam from 09:30 a.m. to 3:00 p.m. CET. thanks to the support of Baksla.sh.
📖 Read our attendee guide for venue, accommodation, and transportation details.
👕 Complete your Symfony Live profile to inform us of your dietary preferences, T-shirt size and talk preferences!
Joins us online!
💡Follow the "conference" blog posts to not miss anything!
Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎
UUID v7 is a recent addition to the UUID specification that generates time-ordered UUIDs based on a high-resolution Unix Epoch timestamp source. It's an improved version over UUID v1 and UUID v6, and it's now the recommended option instead of those older versions.
Starting in Symfony 7.4, UUID v7 is used by default when creating UUID values via a factory:
namespace App\Service;
use Symfony\Component\Uid\Factory\UuidFactory;
class FooService
{
public function __construct(
private UuidFactory $uuidFactory,
) {
}
public function generate(): void
{
// both UUIDs will use UUID v7 by default
$uuid = $this->uuidFactory->create();
$timestampBasedUuid = $this->uuidFactory->timeBased()->create();
// ...
}
}
If you need to generate a different version, you can configure the default values used by the factory:
# config/packages/uid.yaml
framework:
uid:
default_uuid_version: 6
time_based_uuid_version: 1
# ...
The time component of UUID v7 values provides millisecond precision. However, the UUID spec mentions that "it is possible to use additional clock precision [...] to provide values that are time ordered with sub-millisecond precision".
In Symfony 7.4, we're updating UUID v7 generation to include microsecond precision. You don't have to do anything to benefit from this new feature. Just update to Symfony 7.4 and any new UUIDs you create will include this microsecond precision. This comes with a nice performance improvement that reduces the generation time by 10%.
Many UUID versions include random or time-dependent parts, which makes them
hard to use in tests. In Symfony 7.4, we're introducing a MockUuidFactory
to make your UUIDs predictable and reproducible in tests.
First, your services using UUIDs must rely on the UuidFactory
to create them:
use Symfony\Component\Uid\Factory\UuidFactory;
use Symfony\Component\Uid\Uuid;
class UserService
{
public function __construct(
private UuidFactory $uuidFactory
){
}
public function createUserId(): string
{
return $this->uuidFactory->create()->toRfc4122();
}
// ...
}
Then, when testing those services, use a MockUuidFactory
to define the
list of UUIDs that will be returned for each call to create a new UUID value:
use PHPUnit\Framework\TestCase;
use Symfony\Component\Uid\Factory\MockUuidFactory;
use Symfony\Component\Uid\UuidV4;
class UserServiceTest extends TestCase
{
public function testCreateUserId()
{
$factory = new MockUuidFactory([
UuidV4::fromString('11111111-1111-4111-8111-111111111111'),
UuidV4::fromString('22222222-2222-4222-8222-222222222222'),
]);
$service = new UserService($factory);
$this->assertSame('11111111-1111-4111-8111-111111111111', $service->createUserId());
$this->assertSame('22222222-2222-4222-8222-222222222222', $service->createUserId());
}
}
In addition to the create()
method, it also supports randomBased()
,
timeBased()
, and nameBased()
methods. You can also mix different UUID
versions in the list of returned values.
SymfonyCon Amsterdam 2025, our next annual international Symfony conference, will take place on:
The schedule is available here, as well as the complete list of workshop topics.
Stay in the look out for more to come!👀
We’re thrilled to welcome Mitchel Vroege, Developer, as a speaker with the talk “Symfony and Rust: Accelerating Hot Paths with FFI”
"I'm not going to tell you to rebuild your application in Rust. At all. I love Symfony (and PHP), we all do. But there are times when we hit a performance roadblock. Or run out of memory. Maybe even both.
In this talk, we’ll replace part of our logic with a native helper using PHP’s FFI and Rust. We’ll explore performance gains, show practical implementation steps, and discuss when native code makes sense. And finally, I’ll share a skeleton project so you can start experimenting in tonight."
🎟️ Register now and choose the ticket that suits you the best among workshop, conference and combo ticket. Check all the details and get your ticket!
🖥️ Check out the exciting 13 workshop topics on this page.
🎤 Explore the great lineup of conference talks here, featuring top-notch expert speakers as Fabien Potencier, Christopher Hertel, Robin Chalas, Tobias Nyholm, Andreas Braun, Anna Filina, Pauline Vos, Stefan Koopmanschap, Nicolas Grekas, Iain Cambridge, Sebastian Bergmann, Konrad Oboza, Alexandre Salome, Antoine Bluchet, Kévin Dunglas, Rob Allen, Mathias Arlaud, Benjamin Eberlei, Viktor Pikaev, Valentin Rusev Valentin Rusev, Romain Neutron and many others...
🫵 Participate in the Unconference track, a participant-driven format where attendees shape the content and discussions in real-time. Have a topic you're passionate about? Claim your slot by emailing us at events@symfony.com
and set the stage for an unforgettable experience. Each unconference talk lasts 20 minutes with a screen and projector available on both days.
🎉 Celebrate Symfony’s 20th Anniversary with us at the Kanarie Club! Join us for an unforgettable evening of drinks, music, and good vibes on Thursday, November 27 from 7:30 to 10:30 pm at the vibrant Kanarie Club, right in the heart of De Hallen — a lively food court with 21 amazing stands (grab your favorite bites, bring them to the Kanarie club!) Dress as you like or simply add a touch of fun!✨
💻 Save the date for the Symfony hackathon on November 29. Everyone is welcome to join the hackday! Whether you're an experienced contributor or new to the community, your participation is highly valued as it brings a fresh perspective! More details are available here. The hackathon will be hosted in Volkshotel Amsterdam from 09:30 a.m. to 3:00 p.m. CET. thanks to the support of Baksla.sh.
📖 Read our attendee guide for venue, accommodation, and transportation details.
👕 Complete your Symfony Live profile to inform us of your dietary preferences, T-shirt size and talk preferences!
Joins us online!
💡Follow the "conference" blog posts to not miss anything!
Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎
Symfony already provides the is_granted()
and is_granted_for_user()
Twig functions so you can check permissions with voters in your templates.
These functions return a boolean value indicating whether the current or
specified user has the given security attribute.
In Symfony 7.4, we're adding two new Twig functions: access_decision()
and
access_decision_for_user()
. They return an AccessDecision object, a DTO
that stores the access verdict, the collection of votes, the resulting message
(for example, "Access granted" or a custom access-denied message), and more.
{% set voter_decision = access_decision('post_edit', post) %}
{% if voter_decision.isGranted() %}
{# ... #}
{% else %}
{# before showing voter messages to end users, make sure it's safe to do so #}
<p>{{ voter_decision.message }}</p>
{% endif %}
In Symfony 7.3, we introduced the Vote
object as part of a feature that
explains security voter decisions. In Symfony 7.4, we're extending it so you can
attach arbitrary metadata to each vote. Inside your security voter, use the
extraData
property of the Vote
object to add any custom value:
use Symfony\Component\Security\Core\Authorization\Voter\Vote;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
// ...
class BlogPostVoter extends Voter
{
// ...
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token, ?Vote $vote = null): bool
{
// ...
// values can be of any type, not only strings
$vote->extraData['some_key'] = 'some value';
}
}
You can use this new feature, for example, when defining a custom access decision strategy.
By default, Symfony votes can only grant, deny, or abstain, and all votes
have equal weight. In a custom strategy, you could assign a score or weight to
each vote (for example, $vote->extraData['score'] = 10;
) and use that value
when aggregating results:
// src/Security/MyCustomAccessDecisionStrategy.php
use Symfony\Component\Security\Core\Authorization\Strategy\AccessDecisionStrategyInterface;
class MyCustomAccessDecisionStrategy implements AccessDecisionStrategyInterface
{
public function decide(\Traversable $results, $accessDecision = null): bool
{
$score = 0;
foreach ($results as $key => $result) {
$vote = $accessDecision->votes[$key];
if (array_key_exists('score', $vote->extraData)) {
$score += $vote->extraData['score'];
} else {
$score += $vote->result;
}
}
// ...
}
}
This week, 41 pull requests were merged (30 in code and 11 in docs) and 31 issues were closed (24 in code and 7 in docs). Excluding merges, 23 authors made additions and deletions. See details for code and docs.
These are some of the most recent Symfony job offers:
You can publish a Symfony job offer for free on symfony.com.
SymfonyCasts is the official way to learn Symfony. Select a track for a guided path through 100+ video tutorial courses about Symfony, PHP and JavaScript.
This week, SymfonyCasts published the following updates:
Symfony has supported three different configuration formats since day one: PHP, YAML, and XML. All formats provide nearly identical capabilities and equivalent performance because they are compiled back to PHP before runtime.
In recent Symfony versions, XML support was disabled by default for packages and
routes. To re-enable it, you had to update the configureContainer()
and/or
configureRoutes()
methods in the src/Kernel.php
file.
In Symfony 7.4, XML configuration is officially deprecated, and starting with Symfony 8.0, it will no longer be supported. YAML will remain the default format used by Symfony and by the Symfony recipes, but you can also use PHP if you prefer a fully code-based configuration.
For reusable Symfony bundles, XML remains a popular format since it was the officially recommended option for many years. You can use the XML config to PHP tool to automatically convert your bundle's XML configuration to PHP.
Alongside this deprecation, Symfony 7.4 enhances the remaining formats with important new features.
JSON schemas describe the structure, constraints, and data types of JSON documents and JSON-compatible formats such as YAML. Combined with a schema-aware editor or validator (like the ones built into modern IDEs such as PHPStorm) they enable real-time validation and autocompletion.
In Symfony 7.4, new schemas are available for services and routes configuration,
as well as for validation and serialization metadata. That's why updated
Symfony recipes now include the following $schema:
line at the top of YAML
files to declare the corresponding schema:
# config/services.yaml
# yaml-language-server: $schema=../vendor/symfony/dependency-injection/Loader/schema/services.schema.json
parameters:
# ...
services:
# ...
# config/routes.yaml
# yaml-language-server: $schema=../vendor/symfony/routing/Loader/schema/routing.schema.json
controllers:
# ...
We're also exploring new ways to make PHP configuration more expressive. In Symfony 7.4, we're introducing advanced array shapes, which allow you to configure your application using structures similar to YAML but written in pure PHP.
This lets you define routes in PHP like this:
// config/routes.php
namespace Symfony\Component\Routing\Loader\Configurator;
return Routes::config([
'route1_name' => ['path' => '/path1'],
'when@dev' => [
'route2_name' => ['path' => '/path2'],
],
]);
And define configuration as follows:
// config/packages/framework.php
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
return App::config([
'framework' => [
'secret' => env('APP_SECRET'),
'esi' => true,
'session' => [
'handler_id' => null,
'cookie_secure' => 'auto',
'cookie_samesite' => 'lax',
],
],
]);
These array shapes can be leveraged by static analyzers and IDEs for better insight and autocompletion, although the exact experience will depend on your editor.
SymfonyCon Amsterdam 2025, our next annual international Symfony conference, will take place on:
The schedule is available here, as well as the complete list of workshop topics.
Stay in the look out for more to come!👀
We’re thrilled to welcome Paul Dragoonis, (@dr4goonis), CTO, ByteHire, as a speaker with the talk “From Runtime to Resilience: Scaling PHP”
"Scaling PHP is about resilience and performance, not just traffic. This talk covers live demos of optimising the PHP runtime, tuning configs, and measuring FrankenPHP and PHP-FPM with tools like OpenMetrics, Grafana, and k6. Additionally, you’ll learn to avoid design flaws, architect for scalability, and gain the mindset to confidently scale PHP applications."
🎟️ Register now and choose the ticket that suits you the best among workshop, conference and combo ticket. Check all the details and get your ticket!
🖥️ Check out the exciting 13 workshop topics on this page.
🎤 Explore the great lineup of conference talks here, featuring top-notch expert speakers as Fabien Potencier, Christopher Hertel, Robin Chalas, Tobias Nyholm, Andreas Braun, Anna Filina, Pauline Vos, Stefan Koopmanschap, Nicolas Grekas, Iain Cambridge, Sebastian Bergmann, Konrad Oboza, Alexandre Salome, Antoine Bluchet, Kévin Dunglas, Rob Allen, Mathias Arlaud, Benjamin Eberlei, Viktor Pikaev, Valentin Rusev Valentin Rusev, Romain Neutron and many others...
🫵 Participate in the Unconference track, a participant-driven format where attendees shape the content and discussions in real-time. Have a topic you're passionate about? Claim your slot by emailing us at events@symfony.com
and set the stage for an unforgettable experience. Each unconference talk lasts 20 minutes with a screen and projector available on both days.
🎉 Celebrate Symfony’s 20th Anniversary with us at the Kanarie Club! Join us for an unforgettable evening of drinks, music, and good vibes on Thursday, November 27 from 7:30 to 10:30 pm at the vibrant Kanarie Club, right in the heart of De Hallen — a lively food court with 21 amazing stands (grab your favorite bites, bring them to the Kanarie club!) Dress as you like or simply add a touch of fun!✨
💻 Save the date for the Symfony hackathon on November 29. Everyone is welcome to join the hackday! Whether you're an experienced contributor or new to the community, your participation is highly valued as it brings a fresh perspective! More details are available here. The hackathon will be hosted in Volkshotel Amsterdam from 09:30 a.m. to 3:00 p.m. CET. thanks to the support of Baksla.sh.
📖 Read our attendee guide for venue, accommodation, and transportation details.
👕 Complete your Symfony Live profile to inform us of your dietary preferences, T-shirt size and talk preferences!
Joins us online!
💡Follow the "conference" blog posts to not miss anything!
Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎
SymfonyCon Amsterdam 2025, our next annual international Symfony conference, will take place on:
The schedule is available here, as well as the complete list of workshop topics.
Stay in the look out for more to come!👀
We’re thrilled to welcome Valentin Rusev, as a speaker with the talk “Inside the first Git commit: powerful ideas behind a minimal start”
"In this talk, we will dissect the first Git commit by Linus Torvalds and uncover the powerful software design principles embedded in its earliest code. We will explore how Git’s choice of data structures (like immutable content-addressed blobs and trees) laid the foundation for reliability, correctness, and performance.
We will also highlight how Git is a brilliant embodiment of Unix philosophy: small, composable tools; reliance on the filesystem; text-based formats; and simplicity in interface with power in composition. Even in its minimal form, Git introduced key operations such as SHA-1 hashing, snapshot storage, and a filesystem-based object database that collectively reflect deep design clarity."
🎟️ Register now and choose the ticket that suits you the best among workshop, conference and combo ticket. Check all the details and get your ticket!
🖥️ Check out the exciting 13 workshop topics on this page.
🎤 Explore the great lineup of conference talks here, featuring top-notch expert speakers as Fabien Potencier, Christopher Hertel, Robin Chalas, Tobias Nyholm, Andreas Braun, Anna Filina, Pauline Vos, Stefan Koopmanschap, Nicolas Grekas, Iain Cambridge, Sebastian Bergmann, Konrad Oboza, Alexandre Salome, Antoine Bluchet, Kévin Dunglas, Rob Allen, Mathias Arlaud, Benjamin Eberlei, Viktor Pikaev, Valentin Rusev Valentin Rusev, Romain Neutron and many others...
🫵 Participate in the Unconference track, a participant-driven format where attendees shape the content and discussions in real-time. Have a topic you're passionate about? Claim your slot by emailing us at events@symfony.com
and set the stage for an unforgettable experience. Each unconference talk lasts 20 minutes with a screen and projector available on both days.
🎉 Celebrate Symfony’s 20th Anniversary with us at the Kanarie Club! Join us for an unforgettable evening of drinks, music, and good vibes on Thursday, November 27 from 7:30 to 10:30 pm at the vibrant Kanarie Club, right in the heart of De Hallen — a lively food court with 21 amazing stands (grab your favorite bites, bring them to the Kanarie club!) Dress as you like or simply add a touch of fun!✨
💻 Save the date for the Symfony hackathon on November 29. Everyone is welcome to join the hackday! Whether you're an experienced contributor or new to the community, your participation is highly valued as it brings a fresh perspective! More details are available here. The hackathon will be hosted in Volkshotel Amsterdam from 09:30 a.m. to 3:00 p.m. CET. thanks to the support of Baksla.sh.
📖 Read our attendee guide for venue, accommodation, and transportation details.
👕 Complete your Symfony Live profile to inform us of your dietary preferences, T-shirt size and talk preferences!
Joins us online!
💡Follow the "conference" blog posts to not miss anything!
Want the latest Symfony updates? Follow us and tune in from wherever you are 🌎