Компонент Symfony Uid предоставляет инструменты для генерации уникальных идентификаторов, таких как UUID и ULID, и работы с ними. В Symfony 5.2 улучшаем его интеграцию с остальной частью фреймворка. В предыдущей статье показали новые типы Doctrine для UUID и ULID, а в этой статье показана интеграция с компонентами Serializer и Validation.
Нормализатор Uid
Symfony 5.2 представляет новый класс UidNormalizer
, который может нормализовать/денормализовать свойства с помощью значений UUID и ULID.
Рассмотрим, например, следующую сущность со свойством UUID:
// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Column(type="uuid")
*/
private $id;
// ...
}
Благодаря новому нормализатору Uid (который включен по умолчанию, поэтому вам не нужно ничего менять в своем приложении) эта сущность автоматически сериализуется и десериализуется, как и ожидалось:
$product = new Product();
$jsonContent = $serializer->serialize($product, 'json');
// $jsonContent contains {"id":"9b7541de-6f87-11ea-ab3c-9da9a81562fc","...":"..."}
Валидатор Ulid
Symfony включает валидатор UUID с 2014 года для проверки значений UUID типа от 1 до 5.
Начиная с Symfony 5.2, он также будет включать ограничение проверки Ulid для проверки значений ULID:
// src/Entity/Product.php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
*/
class Product
{
/**
* @ORM\Column(type="ulid")
* @Assert\Ulid
*/
private $someProperty;
// ...
}
Последнее улучшение, сделанное Николасом Грекасом в запросе на слияние #38332 — это обновление существующего валидатора UUID для проверки значений UUIDv6.