如何使用 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
。
警告
当第二个参数 $clearMissing
为 false
时,就像使用 “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 许可协议获得许可。