出现表格中已输入的旧信息

Appear old information already entered in a form

我正在尝试显示错误验证消息 旧信息已经输入 ,但是当表单无效并提交时出现问题 else if ($form->isSubmitted()&& !$form->isValid()): old input content(old 已经输入的信息)会消失.
顺便说一下,我希望在每次提交后 url 以 #contact 结尾,这就是我使用 this->redirect 的原因。

    $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())); 
}

如果表单有效,您应该只重定向到您的索引。现在,重定向发生在 } 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())); 

}

这样,如果您的表单无效,它将再次 return 呈现表单(包括您的错误)。您可以看到遵循该流程的控制器示例 here