New in Symfony 6.1: Improvements Related to Types

UIDs Controller Resolver

        Contributed by Thomas Calvet
         in #44665.

Symfony provides argument value resolvers to transform certain arguments of controller methods into other objects. That's how you can get for example the current request object just by typing any argument with the Response class. In Symfony 6.1 we're add a new resolver to transform UID values into UID objects. For example, in previous Symfony versions you need to do this to get a UUID v4 from a controller argument:

    #[Route(path: '/token/{token}')]

public function someControllerMethod(string $token): Response { $token = UuidV4::fromRfc4122($token); // ... }

In Symfony 6.1 you can do the same type-hinting the controller argument with the type of object you want to receive:

    use Symfony\Component\Uid\UuidV4;

[Route(path: '/token/{token}')]

public function someControllerMethod(UuidV4 $token): Response { // ... }

Support for Mutation of Constructor Promoted Properties

        Contributed by Raphaël Voisin
         in #45062.

Starting from PHP 8.0, you can use constructor property promotion to declare properties directly in the constructor signature. However, you can use PHPdoc annotations to change the type of the properties. In Symfony 6.1 we've improved the PropertyInfo component to take into account those PHPdoc modifications. In the following example, the type of $someProperty will be reported as string instead of mixed:

    class SomeClass

{ /**

  • @param string $someProperty */ public function __construct(private mixed $someProperty) { } }

Backend Enums Controller Resolver

        Contributed by Maxime Steinhausser
         in #44831.

Another controller argument resolver added in Symfony 6.1 allows to transform arguments into backend enums cases. Take for example the well-known Suit enum example:

    namespace App\Model;

enum Suit: string { case Hearts = 'H'; case Diamonds = 'D'; case Clubs = 'C'; case Spades = 'S'; }

In Symfony 6.1 you can use Suit as the type of the controller argument. If the route parameter matches any of the enum values, Symfony will inject the enum case. Otherwise, it will return a 404 HTTP error:

    class CardController

{

[Route('/cards/{suit}')]

public function list(Suit $suit): Response
{
    // ...
}

}

PHPStan Pseudo-Types Support

        Contributed by Emil Masiakowski
         in #44451.

Thanks to the popularity of static analyzers such as PHPStan, more and more developers use pseudo-types that describe arguments and return values with more precision. For example, instead of string you can use non-empty-string; instead of int you can use positiveInt; instead of int|float you can use number, etc. In Symfony 6.1 we've improved the PropertyInfo to properly infer the right PHP type of a variable described with these pseudo-types:

    class SomeClass

{ /* @var negative-int / public $property1;

/** @var non-empty-array */
public $property2;

/** @var non-empty-list */
public $property3;

/** @var non-empty-lowercase-string */
public $property4;

}

In Symfony 6.1, the PHP type of these properties will be correctly inferred as integer, array, array and string respectively.

                Sponsor the Symfony project.

https://symfony.com/blog/new-in-symfony-6-1-improvements-related-to-types?utm_source=Symfony%20Blog%20Feed&utm_medium=feed

Établi 3y | 20 mai 2022, 11:20:10


Connectez-vous pour ajouter un commentaire

Autres messages de ce groupe

A Week of Symfony #973 (August 18–24, 2025)

This week, Symfony development focused on improving the IsGranted attribute with a new option, updated the Route attribute to allow setting multiple environments, improved the DomCrawler component to

24 août 2025, 09:40:28 | Symfony
A Week of Symfony #972 (August 11–17, 2025)

This week, development activity mostly focused on dealing with the deprecation of sleep/wakeup methods in PHP 8.5 and their replacement by serialize/unserialize methods. In addition, we published more

17 août 2025, 08:30:06 | Symfony
Let’s build the Symfony AI ecosystem together

It’s been only in July that we published symfony/ai and kicked off our AI initiative, but the repository has been busy since day one. Over 500 stars, more than 200 pull requests & issues, trending

16 août 2025, 09:30:03 | Symfony
SymfonyCon Amsterdam 2025:   Unconference Track at SymfonyCon Amsterdam 2025

🎤 Take the stage at SymfonyCon Amsterdam 2025, on your own terms!

The Unconference track is back and more dynamic than ever!

This unique, participant-driven format invites attendees to shape

12 août 2025, 12:40:20 | Symfony
A Week of Symfony #971 (August 4–10, 2025)

This week, Symfony completed the migration to PHPUnit 12 in the 7.4 branch, which required many changes during the past weeks, such as replacing annotations with attributes. In addition, we updated th

10 août 2025, 09:40:09 | Symfony
SymfonyCon Amsterdam 2025:  Join the Symfony Hackathon:  Collaborate, Contribute, Create

🧑‍💻HACKDAY IS COMING!

Get ready to code, collaborate, and contribute, Symfony Hackday is back!

Join us in Amsterdam on Saturday, November 29th, for a hands-on hackathon designed to bring the

6 août 2025, 10:40:04 | Symfony
A Week of Symfony #970 (July 28 – August 3, 2025)

This week, Symfony released the maintenance versions 6.4.24, 7.2.9, and 7.3.2. Meanwhile, we began deprecating the XML configuration format in some components, enhanced the YAML configuration format t

3 août 2025, 08:30:03 | Symfony