New in Symfony 6.1: Improved Routing Requirements and UTF-8 Parameters

Using PHP BackedEnum as Route Requirements

        Contributed by Thomas Calvet
         in #45803.

In PHP, backed enumerations are enumerations where all its elements are backed by some scalar value. This makes them useful to restrict the possible values of some routing parameter. In previous Symfony versions, you had to create the requirements manually using public constants:

    #[Route('/foo/{bar}', requirements: ['bar' => SomeEnum::AAA.'|'.SomeEnum::BBB])]

In Symfony 6.1, we're improving the Routing component to fully support \BackedEnum objects as follows:

    use Symfony\Component\Routing\Requirement\EnumRequirement;

// 'bar' parameter allows all values defined in the Enum

[Route('/foo/{bar}', requirements: ['bar' => new EnumRequirement(SomeEnum::class)])]

// 'bar' parameter only allows certain values of those defined in the Enum

[Route('/foo/{bar}', requirements: ['bar' => new EnumRequirement(SomeEnum::class, SomeEnum::Aaa, SomeEnum::Bbb)])]

A Collection of Common Routing Requirements

        Contributed by Thomas Calvet
         in #45528.

When defining routes, there are some requirements that repeat on many projects. For example, restricting some value to be an integer, or a date or a valid UUID pattern. In Symfony 6.1 we're introducing a Requirement enumeration to define all those common routing requirements so you can use them in your projects:

    use Symfony\Component\Routing\Requirement\Requirement;

[Route('/users/{id}', requirements: ['id' => Requirement::UUID_V4])]

[Route('/users/{id}')]

[Route('/posts/{date}/{slug}', requirements: [

'date' => Requirement::DATE_YMD,
'slug' => Requirement::ASCII_SLUG,

])]

// 'CATCH_ALL' is equivalent to '.+' (accepts all characters, including '/')

[Route('/category/{name}', requirements: ['name' => Requirement::CATCH_ALL])]

UTF-8 Parameter Names

        Contributed by Nicolas Grekas
         in #45054.

In PHP, variable identifiers can contain UTF-8 characters (e.g. $iñtërnâtiónàlizætiøn = '...') However, parameters in Symfony routes could only include ASCII characters. In Symfony 6.1 we're improving the Routing component to allow using UTF-8 characters in all route parameters:

    use Symfony\Component\Routing\Annotation\Route;

[Route('/blog/{föo}/{bár}', name: '...')]

public function someControllerMethod(string $föo, string $bár) { // ... }

                Sponsor the Symfony project.

https://symfony.com/blog/new-in-symfony-6-1-improved-routing-requirements-and-utf-8-parameters?utm_source=Symfony%20Blog%20Feed&utm_medium=feed

Created 3y | Apr 25, 2022, 2:20:27 PM


Login to add comment

Other posts in this group

Symfony 7.3.0-BETA2 released

Symfony 7.3.0-BETA2 has just been released. This is a pre-release version of Symfony 7.3. If you want to test it in your own applications before its final release, run the following commands:

May 10, 2025, 1:10:15 PM | Symfony
New in Symfony 7.3: Mailer Security Improvements

The Symfony Mailer component provides many security-related features like signing and encrypting email messages. In Symfony 7.3 we're pushing those features even further to give you greater control an

May 9, 2025, 9:20:10 AM | Symfony
SymfonyOnline June 2025: Detect Hidden Defects: Check Your PHP Tests

SymfonyOnline June 2025 is almost here, starting in almost 2 months on:

June 10-11: Workshop days. It is possible to attend 1 two-day training or 2 one-day trainings. June 12-13: Online confe

May 8, 2025, 2:40:19 PM | Symfony
New in Symfony 7.3: JsonPath Component

Contributed by Alexandre Daubois in

May 8, 2025, 10:10:10 AM | Symfony
SymfonyOnline June 2025: Combining Turbo, LiveComponent & Stimulus... the Right Way?

SymfonyOnline June 2025 is almost here, starting in almost 2 months on:

June 10-11: Workshop days. It is possible to attend 1 two-day training or 2 one-day trainings. June 12-13: Online confe

May 7, 2025, 1:10:15 PM | Symfony
New in Symfony 7.3: New and Improved Console Helpers

Symfony 7.3 introduces powerful improvements to the Console component, beyond the much-anticipated invokable commands and input attributes. This version also brings new helpers and features designed t

May 7, 2025, 8:30:04 AM | Symfony
New in Symfony 7.3: Static Error Pages

Contributed by Loick Piera in

May 6, 2025, 9:20:10 AM | Symfony