如何在Symfony 4中生成唯一的ID?

pea*_*ove 4 uuid unique-id symfony

我想创建一个唯一的ID,所以在我的代码中Controller.php,我这样写:

use Symfony\Component\Validator\Constraints\Uuid;
Run Code Online (Sandbox Code Playgroud)

然后在我的功能中:

$unique_id = $this->uuid = Uuid::uuid4();
Run Code Online (Sandbox Code Playgroud)

但是我收到错误消息:

尝试调用名为“ Symfony \ Component \ Validator \ Constraints \ Uuid”的类的未定义方法“ uuid4”。

wan*_*now 7

您可以ramsey/uuidhttps://packagist.org/packages/ramsey/uuid使用

composer require ramsey/uuid
Run Code Online (Sandbox Code Playgroud)

安装后:

use Ramsey\Uuid\Uuid;

function generateUid()
{
   return Uuid::uuid4();
}
Run Code Online (Sandbox Code Playgroud)

您可以查看文档以获取更多信息。

  • 要使用该函数,您必须添加 `use Ramsey\Uuid\Uuid;` 并直接调用:`$unique_id = $this->uuid = Uuid::uuid4();` 并使用 (3认同)

Chr*_*con 5

将对象持久保存到数据库时,只有原则可以为您自动生成uuid。您可以在实体中像这样进行设置。

/**
 *
 * @ORM\Id
 * @ORM\Column(name="id", type="guid")
 * @ORM\GeneratedValue(strategy="UUID")
 */
protected $id;
Run Code Online (Sandbox Code Playgroud)

有时这确实是个问题,当您立即需要uuid来获取代码中的进一步指令时,却无法在该时间点持久化该对象。因此,我在使用此程序包方面取得了良好的经验:

https://packagist.org/packages/ramsey/uuid

<?php

namespace YourBundle\Controller;

use Ramsey\Uuid\Uuid;

/**
 * Your controller.
 *
 * @Route("/whatever")
 */
class YourController extends Controller
{
    /**
     * @Route("/your/route", name="your_route")
     */
    public function yourFunction(Request $request)
    {
        try {
            $uuidGenerator = Uuid::uuid4();
            $uuid = $uuidGenerator->toString();
        } catch (\Exception $exception) {
            // Do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)