表单重定向以进行确认

Form redirect for confirmation

目前可以使用以下两个选项之一管理用于确认的表单重定向:

1/ Flash消息:在表单页面或其他页面上使用flashbag,如下所示:

$this->addFlash('success', 'Thank you');
return $this->redirectToRoute('confirmation_page');

2/确认页面:使用像这样的专用确认:

return $this->redirectToRoute('confirmation_page');

但是使用选项 2 可以直接从浏览器访问 confirmation_page,而无需之前提交表单。我目前正在使用 flashbag 机制通过添加 $this->addFlash('success', true) 来修复它;在表单重定向之前,然后在确认页面中检查flashbag内容,以便从表单重定向成功后只能访问一次路由。

是否有任何最佳实践或更合适的管理方法?

   /**
     * @Route("/confirmation", methods="GET", name="confirmation_page")
     */
    public function confirmation(): Response
    {
        $flashbag = $this->get('session')->getFlashBag();
        $success = $flashbag->get("success");

        if (!$success) {
            return $this->redirectToRoute('app_home');
        }

        return $this->render('templates/confirmation.html.twig');
    }

Flash Message 旨在显示消息。相反,请在您的应用程序中使用 sessions

提交确认表单时,在重定向之前的会话中创建一个变量

$this->requestStack->getSession()->set('verifyed',true);
return $this->redirectToRoute('confirmation_page');

在你的方法中使用创建的变量

public function confirmation(): Response
{  
    if (!$this->requestStack->getSession()->get('verifyed')) {
        return $this->redirectToRoute('app_home');
    }

    return $this->render('templates/confirmation.html.twig');
}

不要忘记将 RequestStack 注入您的控制器

private RequestStack $requestStack;

public function __construct(RequestStack $requestStack)
{
    $this->requestStack = $requestStack;
}