如何使用submit()函数来处理表单提交

3.4 版本
维护中的版本

使用 handleRequest() 方法,处理表单提交是很容易的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
use Symfony\Component\HttpFoundation\Request;
// ...
 
public function newAction(Request $request)
{
    $form = $this->createFormBuilder()
        // ...
        ->getForm();
 
    $form->handleRequest($request);
 
    if ($form->isValid()) {
        // perform some action... / 做一些操作
 
        return $this->redirectToRoute('task_success');
    }
 
    return $this->render('AppBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

要了解此方法的更多内容,参考 处理表单提交

手动调用 Form::submit() 

在某些情况下,你可能想要对 “表单被提交的精确时间” 以及 “传入表单的数据” 有更好的控制。不再使用 handleRequest()方法,而是直接把数据提交到 submit() 方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use Symfony\Component\HttpFoundation\Request;
// ...
 
public function newAction(Request $request)
{
    $form = $this->createFormBuilder()
        // ...
        ->getForm();
 
    if ($request->isMethod('POST')) {
        $form->submit($request->request->get($form->getName()));
 
        if ($form->isValid()) {
            // perform some action... / 做一些操作
 
            return $this->redirectToRoute('task_success');
        }
    }
 
    return $this->render('AppBundle:Default:new.html.twig', array(
        'form' => $form->createView(),
    ));
}

由嵌套字段构成的表单,预期 submit() 中传入的是一个数组 。你也可以提交单独的字段,对其直接调用 submit() 即可。

1
$form->get('firstName')->submit('Fabien');

当通过 “PATCH” 请求来提交表单时,你可能只想更新少数几个提交过来的字段。要实现这个,你可以在 submit() 的第二个参数中传入一个boolean值。传递 false 将删除表单对象中的遗失字段。否则,这些丢失的字段将被设置为null

本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。

登录symfonychina 发表评论或留下问题(我们会尽量回复)