Dans cette procédure, je vais vous expliquer comment utiliser les Uuid en tant qu’ID dans Symfony 6. Les UUID permettent de restreindre l’accès des données uniquement aux utilisateurs qui ont normalement accès à celles-ci. Ainsi le fait de changer une valeur dans l’URL ne permettera pas d’accéder à une autre valeur sans connaître l’ID exact tandis qu’avec un ID avec un nombre entier il suffit d’incrémenter la valeur pour accéder aux informations d’autres utilisateurs de l’application.
Prérequis :
- Un projet Symfony 6
- Une entité (Symfony 6 Créer une entité)
Utiliser les UUID dans Symfony 6 :
Avant d’utiliser les UUID, il faut importer la librairie suivante :
composer require symfony/uid
Ensuite ajouté l’utilisation de la Classe suivante :
use Symfony\Component\Uid\UuidV6 as Uuid;
Puis dans votre entité, remplacer les annotations de la propriété $id par les annotations suivantes :
#[ORM\Id]
#[ORM\Column(type: 'uuid', unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
Ensuite changer le Typage de cette propriété de int à Uuid :
// Format initial
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column]
private ?int $id = null;
// Format final
#[ORM\Id]
#[ORM\Column(type: 'uuid', unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private ?Uuid $id = null;
Puis remplacer :
public function getId(): ?int
// Par
public function getId(): ?Uuid
Une fois ces modifications faites, vous pouvez générer les nouvelles migrations :
symfony console make:migration
Puis les déployer :
symfony console d:m:m
Et enfin ajoutez vos Fixtures si vous avez :
symfony console d:f:load
Vous pouvez constater que désormais vos entités on maintenant un UUID au lieu d’un ID :
Pour plus de renseignement sur le fonctionnement des UUID : https://fr.wikipedia.org/wiki/Universally_unique_identifier
Source :
https://symfony.com/doc/current/components/uid.html