Symfony 7 est arrive avec son lot de nouveautes et d’ameliorations. Dans cet article, nous allons explorer les changements majeurs de cette nouvelle version.

Configuration minimale requise

Symfony 7 necessite PHP 8.2 au minimum. C’est un changement important qui permet au framework de tirer parti des dernieres fonctionnalites du langage.

// Utilisation des types d'intersection
public function process(Countable&Traversable $items): void
{
    foreach ($items as $item) {
        // ...
    }
}

Les nouveaux attributs

Symfony 7 introduit de nouveaux attributs PHP pour simplifier la configuration.

MapRequestPayload

Cet attribut permet de mapper automatiquement le corps d’une requete JSON vers un objet DTO :

use Symfony\Component\HttpKernel\Attribute\MapRequestPayload;

#[Route('/api/users', methods: ['POST'])]
public function create(
    #[MapRequestPayload] CreateUserDTO $dto
): JsonResponse {
    $user = $this->userService->create($dto);

    return $this->json($user, Response::HTTP_CREATED);
}

MapQueryString

Pour mapper les parametres de requete :

use Symfony\Component\HttpKernel\Attribute\MapQueryString;

#[Route('/api/products')]
public function list(
    #[MapQueryString] ProductFilterDTO $filters
): JsonResponse {
    $products = $this->repository->findByFilters($filters);

    return $this->json($products);
}

Amelioration du systeme de securite

Le composant Security a ete simplifie avec une nouvelle approche pour les Access Tokens :

// config/packages/security.yaml
security:
    firewalls:
        api:
            pattern: ^/api
            stateless: true
            access_token:
                token_handler: App\Security\AccessTokenHandler
namespace App\Security;

use Symfony\Component\Security\Http\AccessToken\AccessTokenHandlerInterface;

class AccessTokenHandler implements AccessTokenHandlerInterface
{
    public function getUserBadgeFrom(string $accessToken): UserBadge
    {
        // Validation et extraction de l'utilisateur
        $user = $this->tokenService->validateAndGetUser($accessToken);

        return new UserBadge($user->getUserIdentifier());
    }
}

Conclusion

Symfony 7 apporte des ameliorations significatives en termes de productivite et de performance. La migration depuis Symfony 6.4 devrait etre relativement simple grace aux deprecations progressives.

N’hesitez pas a consulter la documentation officielle pour plus de details.