【问题标题】:Form isSubmitted False in symfony Form with Put MethodForm isSubmitted False 在 symfony 表单中使用 Put 方法
【发布时间】:2017-05-09 16:05:27
【问题描述】:

我使用form.factory 创建表单并使用twig 来呈现表单。在这种情况下,我必须使用 PUT 方法。我的代码是:

控制器:

$builder = $this->get('form.factory')->createNamedBuilder();
$form = $builder
    ->add('id', HiddenType::class, array('data' => $id))
    ->add('email', EmailType::class, array(
        'required' => false,
        'data' => count($res['result'][0]['email']) ? $res['result'][0]['email'] : '',
        'attr' => array('class' => 'form-control label_form_symfony'),
        'constraints' => array(
            new Email(array('message' => 'il campo Email non è valido'))
        )
    ))
    ->getForm();

$form->handleRequest($request);

if ($form->isSubmitted() && $request->isXmlHttpRequest()) {
    $data = $form->getData();

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

树枝模板:

{{ form_start(form,{'method':'PUT','attr':{action: path('update_xxx',{'id' : id})}}) }}
    {{ form_widget(form, {'attr' : {'class' : 'label_form_symfony' } } ) }}
    <button type="submit" class="submit_form btn btn-default">Save</button>
    <div id="feedback"></div>
{{ form_end(form) }}

当我提交表单时,我的 ‌‌$request-&gt;getMethod()PUT,但我的 ‌‌$form-&gt;isSubmitted()false

在我的 HTML 中,我什至有隐藏字段:

<input type="hidden" name="_method" value="PUT">

更新 我添加了 $builder-&gt;setMethod('PUT') 在我的控制器中并从我的树枝中删除 'method':'PUT',当我提交表单时,我收到此错误 This form should not contain extra fields.

【问题讨论】:

    标签: symfony symfony-forms


    【解决方案1】:

    默认情况下,handleRequest() 方法检查表单方法(已为表单配置)是否等于请求方法。默认情况下,表单为POST

    只需使用setMethod 函数。 $builder-&gt;setMethod('PUT') 或者你也可以在表单类型类的默认选项中设置。

    【讨论】:

    • with $builder-&gt;setMethod('PUT') 我有这个错误This form should not contain extra fields.
    • 因为你忘了删除&lt;input type="hidden" name="_method" value="PUT"&gt;——这是一个额外的字段。
    • 我不添加&lt;input type="hidden" name="_method" value="PUT"&gt; Symfony 为我做的。现在我删除 'method':'PUT'form Twig 并添加 $builder-&gt;setMethod('PUT') 并在我的 Html 中我有 &lt;input type="hidden" name="_method" value="PUT"&gt; 因为是 Symfony 这样做
    • 这种错误(此表单不应包含额外字段)意味着在验证时您获得的字段多于声明的字段。至少您可以在表单选项(即创建表单构建器时)将allow_extra_fields 设置为true
    • 我使用了它自己的表单类型(例如,AppBundle\UpdateXXXType),然后在控制器中运行类似$form = $this-&gt;createForm(UpdateXXXType::class, new UpdateXXXModel()); 的东西。通常,您应该避免在控制器内部构建表单,因为如果它破坏了 S.O.L.I.D.原则(控制器必须只负责请求和响应处理)
    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2018-03-01
    • 1970-01-01
    • 2011-12-24
    • 2013-04-05
    • 2018-12-19
    • 2016-07-12
    相关资源
    最近更新 更多