Symfony маршрутизация / URL - PullRequest
       3

Symfony маршрутизация / URL

1 голос
/ 03 ноября 2019

Я делаю простой проект, в котором вы можете создать свой домен (например, Slack и т. Д.), Затем вы создаете проекты внутри домена и задачи внутри проектов.

Я сделал систему входа / регистрации и форму длядобавление доменов при входе в систему. Iv'e установил связи между таблицами. в таблице доменов у меня есть поле с именем 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(),
        ]);
    }
}```

1 Ответ

0 голосов
/ 04 ноября 2019

Ваши "ключи" слишком просты, вы можете получить дубликаты. Если возможно, просто используйте первичный ключ (id) домена / проекта / задачи. В этом случае вам, вероятно, больше не нужно свойство $url в этих трех объектах.

Но поскольку вы пытались придумать более сложную схему, я полагаю, вы хотите, чтобы эти URL-адреса были доступны для анонимных пользователей. пользователи, не делая их доступными для всех, кто пытается случайные идентификаторы в URL. Если это то, что вы пытаетесь достичь, попробуйте использовать случайные строки вместо случайных целых чисел. Вот пример генерации случайной строки, которая на самом деле используется Symfony для генерации безопасных токенов:

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

Возвращает криптографически безопасную псевдослучайную строку с безопасной кодировкой base64, которая не содержит "+",«/» или «=», которые должны быть закодированы в URL. Длина строки составляет ceil($entropy / 6).

Если вам действительно нужно использовать ключи int, rand() не является криптографически безопасным (то есть не таким случайным, как хотелось бы), используйте random_int() вместо.

В любом случае, убедитесь, что вы не получаете дублирующихся записей и установите для этих полей url значение unique в вашей базе данных. Если ваши «ключи» не очень длинные или если вы хотите обработать случай «один на миллиард» и избежать исключения из базы данных, вы также можете вручную проверять наличие дубликатов при генерации случайного «URL» (возможно, с помощью findOneBy()) и сгенерируйте еще один «url», если совпадение найдено (например, выполните генерацию + проверку в цикле while и разорвите цикл, если совпадение не найдено, тогда setUrl($randomUrl))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...