表单重定向以进行确认
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;
}
目前可以使用以下两个选项之一管理用于确认的表单重定向:
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;
}