【问题标题】:Symfony routing/URLsSymfony 路由/URL
【发布时间】:2019-11-03 16:48:56
【问题描述】:

我正在制作简单的项目,您可以在其中创建域(如 slack 等),然后在域内创建项目并在项目内创建任务。

我已经制作了登录/注册系统和用于在您登录时添加域的表单。 我已经在表之间建立了关系。 在域表中,我有一个名为 url 的字段,它是随机的 4 位整数。

我不知道我的 domain->project->task 链接应该是什么样子。 我在考虑 /main/?k=1234 1234 1234 其中每 4 位数字代表上述方案。

问题是:我应该那样做还是另辟蹊径?

{
    /**
     * @Route("main", name="app_main")
     */
    public function new(Request $request): Response
    {
        $domain = new Domain();
        $form = $this->createForm(DomainFormType::Class, $domain);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $User = $this->getUser()->getID();
            $domain->setUsers($User);
            $domain->setUrl(rand(100000, 999999));

            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($domain);
            $entityManager->flush();
            }

        return $this->render('main.html.twig', [
            'form' => $form->createView(),
        ]);
    }
}```

【问题讨论】:

    标签: symfony url routing backend


    【解决方案1】:

    你的“钥匙”太简单了,你可能会得到重复。如果可能,只需使用域/项目/任务的主键 (id)。在这种情况下,您可能不再需要这三个实体中的 $url 属性。

    但是当您尝试提出一个更复杂的方案时,我想您希望匿名用户可以访问这些 url,而不是让任何尝试在 URL 中使用随机 id 的人都可以访问它们。 如果这就是您要完成的任务,请考虑使用随机字符串而不是随机整数。下面是一个随机字符串生成的例子,Symfony 实际使用它来生成安全令牌:

    $entropy = 128;
    $bytes = random_bytes($entropy / 8);
    $randomString = rtrim(strtr(base64_encode($bytes), '+/', '-_'), '=');
    

    它返回一个 URL 安全 base64 编码的加密安全伪随机字符串,其中不包含需要进行 URL 编码的“+”、“/”或“=”。字符串长度为ceil($entropy / 6)

    如果您确实需要使用 int 密钥,rand() 在密码学上不安全(这意味着它不像我们希望的那样随机),请改用 random_int()

    无论哪种方式,请考虑确保您没有获得重复条目并将这些 url 字段设置为您的数据库中的 unique。 如果您的“密钥”不是很长,或者您想处理“十亿分之一”的情况并避免数据库异常,您还可以在生成随机“url”时手动检查重复项(可能使用@987654328 @) 并在找到匹配项时生成另一个“url”(例如,在while 循环中进行生成+检查,如果未找到匹配项则中断循环,然后setUrl($randomUrl)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 2017-06-02
      • 2016-01-02
      相关资源
      最近更新 更多