我正在尝试显示错误验证消息旧已输入的信息,但是当表单无效并且提交else if ($form->isSubmitted()&& !$form->isValid())
时的问题:旧的输入内容( old已输入的信息)将消失
顺便说一句,我希望在每次提交之后,网址以#contact结尾,这就是我使用this->重定向的原因。
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$task = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($task);
$em->flush();
$this->get('session')->getFlashBag()->add(
'notice',
'Votre message est bien envoyé !'
);
} else if ($form->isSubmitted() && !$form->isValid()) {
$errors = array();
foreach ($form->all() as $key => $child) {
if (!$child->isValid()) {
foreach ($child->getErrors() as $error) {
$errors[$key] = $error->getMessage();
}
}
}
foreach ($errors as $key => $value) {
$this->get('session')->getFlashBag()->add('error', $value);
}
return $this->redirect($this->generateUrl('index') . '?a#contact');
}
return $this->render('front/index.html.twig', array('form' => $form ->createView()));
}
答案 0 :(得分:1)
如果表单有效,您应该只重定向到您的索引。目前,} else if ($form->isSubmitted() && !$form->isValid()) {
中正在进行重定向,这意味着将使用无效数据进行重定向。
尝试:
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$task = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($task);
$em->flush();
$this->get('session')->getFlashBag()->add(
'notice',
'Votre message est bien envoyé !'
);
return $this->redirect($this->generateUrl('index') . '?a#contact');
} else if ($form->isSubmitted() && !$form->isValid()) {
$errors = array();
foreach ($form->all() as $key => $child) {
if (!$child->isValid()) {
foreach ($child->getErrors() as $error) {
$errors[$key] = $error->getMessage();
}
}
}
foreach ($errors as $key => $value) {
$this->get('session')->getFlashBag()->add('error', $value);
}
}
return $this->render('front/index.html.twig', array('form' => $form ->createView()));
}
这样,如果您的表单无效,它将再次返回呈现表单(包含您的错误)。您可以看到跟随该流here的控制器的示例。