跳到内容

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

编辑此页

处理 Symfony 表单的推荐方式是使用 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;
use Symfony\Component\HttpFoundation\Response;
// ...

public function new(Request $request): Response
{
    $task = new Task();
    $form = $this->createForm(TaskType::class, $task);

    if ($request->isMethod('POST')) {
        $form->submit($request->getPayload()->get($form->getName()));

        if ($form->isSubmitted() && $form->isValid()) {
            // perform some action...

            return $this->redirectToRoute('task_success');
        }
    }

    return $this->render('task/new.html.twig', [
        'form' => $form,
    ]);
}

通过 submit() 方法提交的字段列表必须与表单类定义的字段相同。否则,您将看到表单验证错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function new(Request $request): Response
{
    // ...

    if ($request->isMethod('POST')) {
        // '$json' represents payload data sent by React/Angular/Vue
        // the merge of parameters is needed to submit all form fields
        $form->submit(array_merge($json, $request->getPayload()->all()));

        // ...
    }

    // ...
}

提示

由嵌套字段组成的表单期望在 submit() 中使用数组。您还可以通过直接在字段上调用 submit() 来提交单个字段。

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

提示

通过 “PATCH” 请求提交表单时,您可能只想更新少数字段。为了实现这一点,您可以将可选的第二个布尔参数传递给 submit()。传递 false 将删除表单对象中任何缺失的字段。否则,缺失的字段将被设置为 null

警告

当第二个参数 $clearMissingfalse 时,就像使用 “PATCH” 方法一样,验证将仅应用于提交的字段。如果您需要验证所有底层数据,请手动添加必需的字段,以便它们得到验证。

1
2
// 'email' and 'username' are added manually to force their validation
$form->submit(array_merge(['email' => null, 'username' => null], $request->getPayload()->all()), false);
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本