Symfony 2 - 单独的表单逻辑,重定向后显示表单错误

标签 symfony symfony-forms

我想分离表单验证逻辑:

public function contactAction()
{
    $form = $this->createForm(new ContactType());

    $request = $this->get('request');
    if ($request->isMethod('POST')) {
        $form->submit($request);
        if ($form->isValid()) {
            $mailer = $this->get('mailer');
            // .. setup a message and send it

            return $this->redirect($this->generateUrl('_demo'));
        }
    }

    return array('form' => $form->createView());
}

我想转化为 2 个单独的操作:
public function contactAction()
{
    $form = $this->createForm(new ContactType());
    return array('form' => $form->createView());
}

public function contactSendAction()
{
    $form = $this->createForm(new ContactType());
    $request = $this->get('request');
    if ($request->isMethod('POST')) {
        $form->submit($request);
        if ($form->isValid()) {
            $mailer = $this->get('mailer');
            // .. setup a message and send it using 

            return $this->redirect($this->generateUrl('_demo'));
        }
    }
    // errors found - go back
    return $this->redirect($this->generateUrl('contact'));
}

问题是,当表单中存在错误时 - 在表单验证和重定向之后,contactAction 中不显示。 (可能它们在重定向后已经被遗忘 - 错误上下文将丢失)

最佳答案

如果查看生成的代码如何CRUD generator处理此问题,您将看到失败的表单验证不会返回重定向,而是使用与 GET 相同的 View 。方法。因此,在您的示例中,您只需:

return $this->render("YourBundle:Contact:contact.html.twig", array('form' => $form->createView()))

而不是返回重定向。这意味着您不会像在重定向中那样丢失表单错误。 CRUD 生成器添加的其他内容是 Method requirement这意味着您可以指定 ContactSendAction需要 POST方法,因此不需要额外的 if($request->isMethod('POST')){陈述。

如果你在别处指定模板,你也可以只返回一个数组,例如你可以使用 @Template annotation然后只是
return array('form' => $form->createView())

关于Symfony 2 - 单独的表单逻辑,重定向后显示表单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17269844/

相关文章:

php - 有没有办法更改 SwiftMailer 中 header 的编码?

forms - Symfony CollectionType : Merge new entries

symfony-forms - 如何获取表单类型的实体管理器

php - DataTransformer 中的 reverseTransform 不起作用

php - Symfony CLI 中的空转储()输出

php - Symfony2 - 在哪里可以找到服务构造函数可能的参数列表?

symfony - 如何在多个页面中拆分长的 symfony 表单?

Symfony 表单/FormBuilder : How to add an option or attribute to multiple form fields

Symfony2 将第 3 方 bundle 添加到服务 Controller

php - Symfony Doctrine 冲洗实体