本文概述
- 1.安装UUID软件包
- 2.使用库
- 已知异常
我们正在谈论Ramsey编写的UUID库, 该库允许你生成和使用RFC 4122版本1、3、4和5通用唯一标识符(UUID)。你可以使用composer在Symfony 3项目上轻松使用此库, 我们将在本文中向你展示如何使用。
1.安装UUID软件包第一步, 你需要使用composer安装该库, 因此打开命令行, 切换到项目目录并执行以下命令:
composer require ramsey/uuid
有关此库的更多信息, 请访问Github上的官方存储库。
2.使用库基本上, 该库在Ramsey \ Uuid命名空间中公开Uuid类, 因此你只需要将其包含在控制器中即可。该类提供4种静态方法, 每种UUID类型都有一个相应的命名法, 例如uuid1, uuid3, uuid4和uuid5:
<
?phpnamespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Exception\HttpException;
// Include Library Namespacesuse Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
class DefaultController extends Controller{/*** @Route("/", name="homepage")*/public function indexAction(Request $request){try {// Generate a version 1 (time-based) UUID object$uuid1 = Uuid::uuid1();
// e.g ba51070a-d754-11e7-b225-4ccc6ab413a6echo $uuid1->
toString() . "<
br>
";
// Generate a version 3 (name-based and hashed with MD5) UUID object$uuid3 = Uuid::uuid3(Uuid::NAMESPACE_DNS, 'php.net');
// e.g 11a38b9a-b3da-360f-9353-a5a725514269echo $uuid3->
toString() . "<
br>
";
// Generate a version 4 (random) UUID object$uuid4 = Uuid::uuid4();
// e.g 0e9139c5-8e06-4a1a-bb5e-52a0abcd0072echo $uuid4->
toString() . "<
br>
";
// Generate a version 5 (name-based and hashed with SHA1) UUID object$uuid5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'php.net');
// e.g c4a760a8-dbcf-5254-a0d9-6a4474bd1b62echo $uuid5->
toString() . "<
br>
";
return new Response();
} catch (UnsatisfiedDependencyException $e) {// Some dependency was not met. Either the method cannot be called on a// 32-bit system, or it can, but it relies on Moontoast\Math to be present.throw new HttpException(500, 'Caught exception: ' . $e->
getMessage());
}}}
该库提到, 除非你对其进行了高级用法以生成与RFC 4122不同的标识符, 否则你可能不希望直接实例化UUID类, 而要使用静态方法。
已知异常在安装和测试库时, 在我们之前的try-catch块中可能会遇到一些异常(未满足的依赖项):
在32位系统上调用Ramsey \ Uuid \ Converter \ Time \ DegradedTimeCnverter :: calculateTime时, 必须存在Moontoast \ Math \ BigNumber。此错误是由于可以在基于32位的系统中实现的数学功能引起的。发生这种情况是因为UUID是一个无符号的128位整数, 而版本1 UUID的时间部分是一个无符号的64位数字。 32位系统上的PHP仅支持最大2147483647的带符号整数。你可以使用composer轻松解决它为PHP安装BigNumber软件包的问题:
composer require moontoast/math
该库对于处理大于(或可能通过数学计算变得大于)给定系统的PHP的最大整数值的整数很有用。在64位系统上, 该数字为9223372036854754775807。在32位系统上, 该数字为2147483647。当溢出此边界时, PHP会将数字转换为浮点数, 从而降低了精度(请参阅PHP手册中的Integers)。有关此软件包的更多信息, 请访问Github上的官方存储库。安装此软件包后, 你应该能够正常生成UUID。如果你知道该库可能遇到的另一个例外, 请在注释框中与社区共享。
【如何在Symfony 3中生成通用唯一标识符(UUID)】编码愉快!
推荐阅读
- 如何反序列化使用Doctrine存储在数据库中的DC2Type数组数据类型
- 如何在基于CLI的基于Unix的操作系统中使用TAR压缩整个目录(包括子目录)
- 通过USB连接到Xamarin.Android应用程序与网站进行通信
- Xamine Android WindowSoftInput Resize(特定页面)
- Xamarin Android(此应用程序使用不正确的配置构建)
- RegisterNavigationServiceAppStart期间的MvxIoCResolveException
- Xamarin.Forms Android改变Button Image的颜色
- Android ActionBar错误的布局方向
- Xamarin表单,在Visual Studio Android Emulator上运行的应用程序但在真实设备上崩溃