Новое в Symfony 5.3: Улучшения UID

Компонент UID был представлен в Symfony 5.1 как экспериментальная функция, которая поможет вам создавать и работать с UID (универсально уникальными идентификаторами), такими как UUID и ULID. В Symfony 5.3 этот компонент больше не считается экспериментальным, и добавили в него несколько новых функций.

Новые способы создания UID

Создавать значения UID легко благодаря таким методам, как Uuid::v1(), Uuid::v4(), new Ulid() и т. д. В Symfony 5.3 добавили новые методы, чтобы вы могли создавать объекты UID из нескольких строковых представлений UID:

$uuid = Uuid::fromBinary("\xd9\xe7\xa1\x84\x5d\x5b\x11\xea\xa6\x2a\x34\x99\x71\x00\x62\xd0");
$uuid = Uuid::fromBase32('6SWYGR8QAV27NACAHMK5RG0RPG');
$uuid = Uuid::fromBase58('TuetYWNHhmuSQ3xPoVLv9M');
$uuid = Uuid::fromRfc4122('d9e7a184-5d5b-11ea-a62a-3499710062d0');

$ulid = Ulid::fromBinary("\x01\x71\x06\x9d\x59\x3d\x97\xd3\x8b\x3e\x23\xd0\x6d\xe5\xb3\x08");
$ulid = Ulid::fromBase32('01E439TP9XJZ9RPFH3T1PYBCR8');
$ulid = Ulid::fromBase58('1BKocMc5BnrVcuq2ti4Eqm');
$ulid = Ulid::fromRfc4122('0171069d-593d-97d3-8b3e-23d06de5b308');

Кроме того, добавили несколько служб, таких как ulid.factory и uuid.factory (и их соответствующие псевдонимы автоподключения UlidFactory, UuidFactory и т. д.), Чтобы вы могли настраивать создание UID. Значения по умолчанию для сгенерированных UID теперь настроены семантически:

# config/packages/framework.yaml
framework:
    uid:
        default_uuid_version: 4

Наконец, добавили классы UlidGenerator и UuidGenerator, чтобы вы могли использовать их в качестве генераторов идентификаторов Doctrine, чтобы использовать UID в качестве значений ваших первичных ключей в сущностях Doctrine.

Типы форм UID

Интеграция с компонентом формы была одной из последних недостающих функций UID. Вот почему в Symfony 5.3 добавили типы форм UuidType и UlidType, чтобы вы могли работать со значениями UID в своих формах.

Эти типы форм отображают <input type="text"> поле со строковым представлением данного объекта UID и преобразуют его обратно в объект UID при отправке формы.

Сериализация UID

Компонент Serializer включает UidNormalizer для преобразования объектов типа Symfony\Component\Uid\AbstractUid в строки. В Symfony 5.3 улучшили его для поддержки различных строковых форматов.

Теперь вы можете передать параметр контекста UidNormalizer::NORMALIZATION_FORMAT_KEY в сериализатор и установить для него желаемый формат (например, UidNormalizer::NORMALIZATION_FORMAT_RFC_4122 и т. д.)

Создание и проверка UID в консоли

Компонент UID теперь включает некоторые консольные команды, которые помогут вам генерировать и проверять детали значений UUID/ULID.

Прочтите документацию по командам UID, чтобы узнать, как включить эти команды в вашем приложении перед их использованием:

 php bin/console uuid:generate --random-based
 php bin/console ulid:generate --count=2 --format=rfc4122

 php bin/console uuid:generate --help
 php bin/console ulid:generate --help
  php bin/console ulid:inspect 01F2TTCSYK1PDRH73Z41BN1C4X
  --------------------- --------------------------------------
   Label                 Value
  --------------------- --------------------------------------
   Canonical (Base 32)   01F2TTCSYK1PDRH73Z41BN1C4X
   Base 58               1BYGm16jS4kX3VYCysKKq6
   RFC 4122              0178b5a6-67d3-0d9b-889c-7f205750b09d
  --------------------- --------------------------------------
   Timestamp             2021-04-09 08:01:24.947
  --------------------- --------------------------------------