我有一个普遍的问题,处理提交表单的当前正确方式应该是什么样的,symfony文档并不清楚什么是正确的方法.
目前我总是这样做:
if ($request->isMethod(Request::METHOD_POST)) {
   $form->handle($request)
   if ($form->isValid()) {...}
}
Run Code Online (Sandbox Code Playgroud)
但我也看到了一些使用此语句的示例(也在symfony文档中):
$form->handle($request);
if ($form->isSubmitted() && $form->isValid()) {...}
Run Code Online (Sandbox Code Playgroud)
因此,没有人知道什么是正确的当前路要走以下symfony的开发者指南,应在第一语句中使用或第二,或都应该合并(尽管这会使得无论是$请求 - > isMethod致电或$形式 - > isSubmitted冗余)
从技术上讲,您只需要:
if ($form->isValid()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)
那是因为:
isValid()检查包括isSubmitted检查.isMethod(Request::METHOD_POST)检查不一定是正确的(一个形式可以使用比不同的方法POST但如果你真的想要遵循最佳实践,你应该使用:
if ($form->isSubmitted() && $form->isValid()) {
    ...
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅http://symfony.com/doc/current/best_practices/forms.html#handling-form-submits.
isSubmitted如果要在实际验证数据之前执行某些特殊任务,可能需要单独使用该方法.我经常使用它进行自定义验证,例如
if ($form->isSubmitted()) {
    ...
    if ($form->isValid()) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)