Новое в Symfony 5.2: сериализация и проверка Uid

Компонент 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.