UID组件
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
UID组件
UID组件提供了可用的实用程序惟一标识符(uid),例如uuid和ULIDs。
5.1
UID组件是在Symfony 5.1中引入的。ob娱乐下载
安装
1
$Composer需要symfonyob娱乐下载/uid
请注意
如果在Symfony应用程序外部安装此组件,则必须要求ob娱乐下载供应商/ autoload.php
文件,以启用Composer提供的类自动加载机制。读这篇文章欲知详情。
uuid
uuid(通用唯一标识符)是软件业中最受欢迎的uid之一。uuid是128位数字,通常用五组十六进制字符表示:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
(米
的UUID版本N
digit是UUID变体)。
生成uuid
类的命名构造函数Uuid
类或任何特定的类来创建每种类型的UUID:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
使用ob娱乐下载\组件\Uid\Uuid;// UUID类型1使用您的设备的MAC地址和时间戳生成UUID。//这两个都是自动获得的,所以你不需要传递任何构造函数参数。$uuid= Uuid::v1 ();// $uuid是Symfony\Component\ob娱乐下载Uid\UuidV1的实例// UUID类型4生成一个随机的UUID,所以你不需要传递任何构造函数参数。$uuid= Uuid::v4 ();// $uuid是Symfony\Component\ob娱乐下载Uid\UuidV4的实例// UUID类型3和5生成一个散列给定名称空间和名称的UUID。第三类用途// MD5哈希,Type 5使用SHA-1。命名空间是另一个UUID(例如,Type 4 UUID)//并且名称是任意字符串(例如,产品名称;如果它是唯一的)。$名称空间= Uuid::v4 ();$的名字=$产品->getUniqueName ();$uuid= Uuid::v3 ($名称空间,$的名字);// $uuid是Symfony\Component\ob娱乐下载Uid\UuidV3的实例$uuid= Uuid::v5 ($名称空间,$的名字);// $uuid是Symfony\Component\ob娱乐下载Uid\UuidV5的实例// RFC 4122定义的命名空间(见https://tools.ietf.org/html/rfc4122#appendix-C)//可以作为PHP常量和字符串值$uuid= Uuid::v3 (Uuid::NAMESPACE_DNS,$的名字);//同:Uuid::v3('dns', $name);$uuid= Uuid::v3 (Uuid::NAMESPACE_URL,$的名字);//与:Uuid::v3('url', $name)相同;$uuid= Uuid::v3 (Uuid::NAMESPACE_OID,$的名字);//与:Uuid::v3('oid', $name)相同;$uuid= Uuid::v3 (Uuid::NAMESPACE_X500,$的名字);//同:Uuid::v3('x500', $name);// UUID类型6不是UUID标准的一部分它是可以按字典排序的//(像ULIDs),包含一个60位的时间戳和63位额外的唯一位。//在http://gh.peabody.io/uuidv6/中定义$uuid= Uuid::v6 ();// $uuid是Symfony\Component\ob娱乐下载Uid\UuidV6的实例
5.3
的Uuid: NAMESPACE_ *
常量和名称空间字符串值(“域名”
,“url”
等)是在Symfony 5.3中引入的。ob娱乐下载
如果您的UUID值已经以其他格式生成,请使用以下任何方法来创建Uuid
对象:
1 2 3 4 5 6
//所有下面的例子都会生成相同的Uuid对象$uuid= Uuid::fromString (“d9e7a184 - 5 - d5b - 11 - ea - a62a - 3499710062 - d0的);$uuid= Uuid::fromBinary (“\ xd9 \ xe7 \ xa1 \ x84 \ x5d \ x5b \ x11 \ xea \ xa6 \ x2a \ x34 \ x99 \ x71 \ x00 \ x62 \ xd0”);$uuid= Uuid::fromBase32 (“6 swygr8qav27nacahmk5rg0rpg”);$uuid= Uuid::fromBase58 (“TuetYWNHhmuSQ3xPoVLv9M”);$uuid= Uuid::fromRfc4122 (“d9e7a184 - 5 - d5b - 11 - ea - a62a - 3499710062 - d0的);
5.3
的fromBinary ()
,fromBase32 ()
,fromBase58 ()
而且fromRfc4122 ()
方法在Symfony 5.3中介绍。ob娱乐下载
转换uuid
使用这些方法将UUID对象转换为不同的基:
1 2 3 4 5 6
$uuid= Uuid::fromString (“d9e7a184 - 5 - d5b - 11 - ea - a62a - 3499710062 - d0的);$uuid->toBinary ();/ /字符串(16)“\ xd9 \ xe7 \ xa1 \ x84 \ x5d \ x5b \ x11 \ xea \ xa6 \ x2a \ x34 \ x99 \ x71 \ x00 \ x62 \ xd0”$uuid->toBase32 ();/ /字符串(26)“6 swygr8qav27nacahmk5rg0rpg”$uuid->toBase58 ();/ /字符串(22)“TuetYWNHhmuSQ3xPoVLv9M”$uuid->toRfc4122 ();/ /字符串(36)“d9e7a184 - 5 - d5b - 11 - ea - a62a - 3499710062 - d0”
使用uuid
属性创建的UUID对象Uuid
类可以使用以下方法(这些方法等价于uuid_ * ()
PHP扩展的方法):
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
使用ob娱乐下载\组件\Uid\NilUuid;使用ob娱乐下载\组件\Uid\Uuid;//检查UUID是否为空(注意该类被调用//用NullUuid代替NullUuid来遵循UUID标准表示法)$uuid= Uuid::v4 ();$uuid运算符NilUuid;/ /错误//检查UUID的类型使用ob娱乐下载\组件\Uid\UuidV4;$uuid= Uuid::v4 ();$uuid运算符UuidV4;/ /正确的//获取UUID datetime(它只在某些UUID类型中可用)$uuid= Uuid::v1 ();$uuid->getDateTime ();//返回一个\DateTimeImmutable实例//比较uuid并检查是否相等$uuid1= Uuid::v1 ();$uuid4= Uuid::v4 ();$uuid1->= ($uuid4);/ /错误//该方法返回:// * int(0)如果$uuid1和$uuid4相等// * int >如果$uuid1大于$uuid4则为0// * int < 0如果$uuid1小于$uuid4$uuid1->比较($uuid4);// int(4)
5.3
的getDateTime ()
方法在Symfony 5.3中引入。ob娱乐下载在以前的版本中,它被称为取得时间()
.
在数据库中存储uuid
如果你使用原则,可考虑使用uuid
Doctrine类型,用于自动转换UUID对象:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /实体/ Product.php名称空间应用程序\实体;使用学说\ORM\映射作为ORM;/ * * *@ORM实体(repositoryClass = \ App \ Repository \ ProductRepository) * /类产品{/ * * *@ORM\列(type = " uuid) * /私人$someProperty;/ /……}
5.2
UUID类型在Symfony 5.2中引入。ob娱乐下载
没有生成器来自动分配uuid作为实体主键的值,但您可以使用以下方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
名称空间应用程序\实体;使用学说\ORM\映射作为ORM;使用ob娱乐下载\组件\Uid\Uuid;/ /……类用户实现了用户界面{/ * * *@ORM\ Id *@ORM\列(type="uuid", unique=true) */私人$id;公共函数__construct(){$这->id = Uuid::v4 ();}公共函数getId():Uuid{返回$这->id;}/ /……}
当使用内置Doctrine存储库方法时(例如:findOneBy ()
), Doctrine知道如何转换这些UUID类型来构建SQL查询(例如:->findOneBy(['user' => $user->getUuid()])
).但是,当使用DQL查询或自己构建查询时,您将需要设置uuid
作为UUID参数的类型:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /仓库/ ProductRepository.php/ /……类ProductRepository扩展ServiceEntityRepository{/ /……公共函数findUserProducts(用户$用户):数组{$qb=$这->createQueryBuilder (“p”)/ /……//添加'uuid'作为第三个参数,告诉Doctrine这是一个uuid->setParameter (“用户”,$用户->getUuid (),“uuid”)//或者,您可以将其转换为与//由Doctrine推断的类型->setParameter (“用户”,$用户->getUuid ()->toBinary ());/ /……}}
ULIDs
ULIDs(通用唯一的字典排序标识符)是128位的数字,通常以26个字符的字符串表示:TTTTTTTTTTRRRRRRRRRRRRRRRR
(T
表示时间戳,并且R
表示随机位)。
当使用uuid不切实际时,ulid是uuid的替代方案。它们提供了与UUID的128位兼容性,它们是按字典顺序排序的,它们被编码为26个字符的字符串(而不是36个字符的UUID)。
请注意
如果在同一进程的同一毫秒内生成多个ULID,则随机部分将加1位,以提供排序的单调性。在本例中,与前面的ULID相比,随机部分不是随机的。
生成ULIDs
实例化Ulid
类来生成一个随机的ULID值:
1 2 3
使用ob娱乐下载\组件\Uid\Ulid;$ulid=新Ulid ();//例如01AN4Z07BY79KA1307SR9X4MV3
如果您的ULID值已经以另一种格式生成,请使用以下任何方法来创建Ulid
对象:
1 2 3 4 5 6
//所有下面的例子都会生成相同的Ulid对象$ulid= Ulid::fromString (“01 e439tp9xjz9rpfh3t1pybcr8”);$ulid= Ulid::fromBinary (“\ x01 \ x71 \ x06 \ x9d \ x59 \ x3d \ x97 \ xd3 \ x8b \ x3e \ x23 \ xd0 \ x6d \ xe5 \ xb3 \”();$ulid= Ulid::fromBase32 (“01 e439tp9xjz9rpfh3t1pybcr8”);$ulid= Ulid::fromBase58 (“1 bkocmc5bnrvcuq2ti4eqm”);$ulid= Ulid::fromRfc4122 (0171069 d - 593 d - 97 - d3 - 8 b3e - 23 - d06de5b308”);
5.3
的fromBinary ()
,fromBase32 ()
,fromBase58 ()
而且fromRfc4122 ()
方法在Symfony 5.3中介绍。ob娱乐下载
转换ULIDs
使用这些方法将ULID对象转换为不同的基:
1 2 3 4 5 6
$ulid= Ulid::fromString (“01 e439tp9xjz9rpfh3t1pybcr8”);$ulid->toBinary ();/ /字符串(16)“\ x01 \ x71 \ x06 \ x9d \ x59 \ x3d \ x97 \ xd3 \ x8b \ x3e \ x23 \ xd0 \ x6d \ xe5 \ xb3 \”($ulid->toBase32 ();/ /字符串(26)“01 e439tp9xjz9rpfh3t1pybcr8”$ulid->toBase58 ();/ /字符串(22)“1 bkocmc5bnrvcuq2ti4eqm”$ulid->toRfc4122 ();/ /字符串(36)“0171069 d - 593 d - 97 - d3 - 8 b3e - 23 - d06de5b308”
使用ulid
属性创建的ULID对象Ulid
类可以使用以下方法:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载\组件\Uid\Ulid;$ulid1=新Ulid ();$ulid2=新Ulid ();//检查给定值是否作为ULID有效$isValid= Ulid::isValid ($ulidValue);// true或false//获取ULID datetime$ulid1->getDateTime ();//返回一个\DateTimeImmutable实例//比较ulid并检查是否相等$ulid1->= ($ulid2);/ /错误//该方法返回$ulid1 <=> $ulid2 . //$ulid1->比较($ulid2);// int(-1)
5.3
的getDateTime ()
方法在Symfony 5.3中引入。ob娱乐下载在以前的版本中,它被称为取得时间()
.
在数据库中存储ulid
如果你使用原则,可考虑使用ulid
Doctrine类型,自动转换为/从ULID对象:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /实体/ Product.php名称空间应用程序\实体;使用学说\ORM\映射作为ORM;/ * * *@ORM实体(repositoryClass = \ App \ Repository \ ProductRepository) * /类产品{/ * * *@ORM\列(type = " ulid ") * /私人$someProperty;/ /……}
还有一个Doctrine生成器来帮助自动生成实体主键的ULID值:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
使用ob娱乐下载\桥\学说\IdGenerator\UlidGenerator;使用ob娱乐下载\组件\Uid\Ulid;/ * * *@ORM实体(repositoryClass = \ App \ Repository \ ProductRepository) * /类产品{/ * * *@ORM\ Id *@ORM\列(type="ulid", unique=true) *@ORM\ GeneratedValue(策略= "自定义")*@ORM\ CustomIdGenerator (class = UlidGenerator::类)* /私人$id;/ /……公共函数getId(): ?Ulid{返回$这->id;}/ /……}
5.2
在Symfony 5.2中引入了ULID类型和生成器。ob娱乐下载
当使用内置Doctrine存储库方法时(例如:findOneBy ()
), Doctrine知道如何转换这些ULID类型来构建SQL查询(例如。->findOneBy(['user' => $user->getUlid()])
).但是,当使用DQL查询或自己构建查询时,您将需要设置ulid
作为ULID参数的类型:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21 22
/ / src /仓库/ ProductRepository.php/ /……类ProductRepository扩展ServiceEntityRepository{/ /……公共函数findUserProducts(用户$用户):数组{$qb=$这->createQueryBuilder (“p”)/ /……//添加'ulid'作为第三个参数,告诉Doctrine这是一个ulid->setParameter (“用户”,$用户->getUlid (),“ulid”)//或者,您可以将其转换为与//由Doctrine推断的类型->setParameter (“用户”,$用户->getUlid ()->toBinary ());/ /……}}
在控制台中生成和检查uuid / ulid
5.3
检查和生成uuid / ulid的命令在Symfony 5.3中引入。ob娱乐下载
该组件提供了几个命令,用于在控制台中生成和检查uuid / ulid。它们在默认情况下是不启用的,因此在使用这些命令之前,您必须在应用程序中添加以下配置:
- YAML
- XML
- PHP
1 2 3 4 5 6
#配置/ services.yaml服务:ob娱乐下载Symfony命令\组件\ Uid \ \ GenerateUlidCommand:~ob娱乐下载Symfony命令\组件\ Uid \ \ GenerateUuidCommand:~ob娱乐下载Symfony命令\组件\ Uid \ \ InspectUlidCommand:~ob娱乐下载Symfony命令\组件\ Uid \ \ InspectUuidCommand:~
现在您可以生成uuid / ulid,如下所示——帮助
选项的命令,以了解他们的所有选项):
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#生成一个随机的UUID$PHP bin/console uuid:generate——random-based#生成一个指定节点的基于时间的UUID$PHP bin/console uuid:generate——time-based=now——node=fb3502dc-137e-4849-8886-ac90d07f64a7#生成2个uuid并以base58格式输出$PHP bin/console uuid:generate——count=2——format=base58#生成一个以当前时间为时间戳的ULID$PHP bin/console ulid:生成#生成一个带有特定时间戳的ULID$PHP bin/console ulid:generate——time= . txt“2021-02-02 14:00:00”#生成2个ulid并以RFC4122格式输出$PHP bin/console ulid:generate——count=2——format=rfc4122
除了生成新的UID之外,您还可以使用以下命令检查它们,以显示给定UID的所有信息:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
$php bin /控制台uuid:检查d0a3a023 f515 - 4 fe0 - 915 c - 575 e63693998 ---------------------- -------------------------------------- 标签的值 ---------------------- -------------------------------------- 版本4标准(RFC 4122) d0a3a023 f515 - 4 fe0 - 915 - c - 575 - 58 SmHvuofV4GCF7QW543rDD9基地32 6 gmeg27x8n9zg92q2qbshpjecr e63693998基地 ---------------------- --------------------------------------$php bin /控制台ulid: 01 f2ttcsyk1pdrh73z41bn1c4x进行检查 --------------------- -------------------------------------- 标签的值 --------------------- -------------------------------------- 规范(基地32)01 f2ttcsyk1pdrh73z41bn1c4x基地58 0178 b5a6 bygm16js4kx3vycyskkq6 RFC 4122 - 67 - d3 - 0 - d9b - 889 c - 7 f205750b09d --------------------- -------------------------------------- 时间戳2021-04-09 08:01:24.947 --------------------- --------------------------------------