【问题标题】:Symfony process submitted formSymfony 进程提交表单
【发布时间】:2016-05-02 12:19:46
【问题描述】:

我有一个普遍的问题,目前处理提交表单的正确方法应该是什么样子,symfony 文档并不清楚什么是正确的方法。
目前我总是在做这样的事情:

if ($request->isMethod(Request::METHOD_POST)) {
   $form->handle($request)
   if ($form->isValid()) {...}
}

但我也看到了一些使用此语句的示例(也在 symfony 文档中):

$form->handle($request);
if ($form->isSubmitted() && $form->isValid()) {...}

那么有谁知道目前遵循 symfony 开发人员指南的正确方法是什么,应该使用第一个语句还是第二个语句,或者应该将两者结合起来(尽管这会使 $request->isMethod 调用或 $form ->isSubmitted 冗余)

【问题讨论】:

    标签: symfony


    【解决方案1】:

    从技术上讲,您只需要:

    if ($form->isValid()) {
        ...
    }
    

    那是因为:

    • isValid() 检查包括isSubmitted 检查。
    • isMethod(Request::METHOD_POST) 检查不一定正确(表单可以使用与POST 不同的方法

    但如果你真的想遵循最佳实践,你应该使用:

    if ($form->isSubmitted() && $form->isValid()) {
        ...
    }
    

    详情请见http://symfony.com/doc/current/best_practices/forms.html#handling-form-submits

    附加信息

    如果您想在实际验证数据之前执行一些特殊任务,您可能需要单独使用isSubmitted 方法。我经常将它用于自定义验证,例如

    if ($form->isSubmitted()) {
        ...
        if ($form->isValid()) {
            ...
        }
    }
    

    【讨论】:

      【解决方案2】:

      一般来说两者都是正确的。 只是第一个示例检查请求类型,而第二个示例只是检查提交并进行验证。

      【讨论】:

      • 我知道这两种方法都有效,但必须有一个指导方针,哪一种是“标准”代码样式
      • 第一个示例只检查请求方法 -- POST/GET/PUT 等。在此示例中,如果请求不是 POST 方法,则不会处理表单。在第二个示例中——表单将使用任何请求方法处理,因此它只使用$form->isSubmitted()。就像这样:if ($request->isMethod(Request::METHOD_POST)||$request->isMethod(Request::METHOD_GET))...。所以第二次简单地省略了这个检查。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 2018-10-30
      • 1970-01-01
      • 2017-10-20
      • 1970-01-01
      • 2018-03-14
      • 2019-04-21
      相关资源
      最近更新 更多