【问题标题】:Appear old information already entered in a form出现旧信息已输入表格
【发布时间】:2017-10-30 04:48:23
【问题描述】:

我正在尝试使用旧的信息已输入显示错误验证消息,但是当表单无效并且提交else if ($form->isSubmitted()&& !$form->isValid())时出现问题:旧的输入内容(旧的信息已输入)将消失
顺便说一句,我希望在每次提交后 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())); 
}

【问题讨论】:

    标签: symfony symfony-3.2


    【解决方案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 的控制器示例。

    【讨论】:

    • 这工作正常,但我希望当页面加载时它会自动进入页面末尾,这就是我将#contact 添加到 url 的原因
    • 如果您尝试将array('form' => $form ->createView()) 作为参数添加到重定向会怎样?无论您重定向到哪里,它都应该传递表单使用的所有错误。
    • 我已经尝试过this->redirect($this->generateUrl('index').'?a#contact' ,array('form' => $form ->createView()));,但它会抛出错误代码,因为语法不正确,我认为无法将参数传递给redirect()
    • 那个语法不正确,见here,应该是:this->redirect($this->generateUrl('index', ,array('form' => $form ->createView())).'?a#contact')或类似的东西。但是,我不知道这将如何与您的特定硬编码添加一起使用。
    • 没有工作,因为你将参数传递给 generateUrl() 而不是重定向(),我告诉你我们不能传递数据来实时重定向,我们用 render() 传递它们,所以我们不能传递任何参数视图
    猜你喜欢
    • 2020-07-07
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多