带有 Put 方法的 symfony 表单中的表单 isSubscribed False

mon*_*ser 2 symfony-forms symfony

我用来form.factory创建一个表单和树枝来渲染该表单。在这种情况下我必须使用PUT方法。我的代码是:

\n\n

控制器:

\n\n
$builder = $this->get(\'form.factory\')->createNamedBuilder();\n$form = $builder\n    ->add(\'id\', HiddenType::class, array(\'data\' => $id))\n    ->add(\'email\', EmailType::class, array(\n        \'required\' => false,\n        \'data\' => count($res[\'result\'][0][\'email\']) ? $res[\'result\'][0][\'email\'] : \'\',\n        \'attr\' => array(\'class\' => \'form-control label_form_symfony\'),\n        \'constraints\' => array(\n            new Email(array(\'message\' => \'il campo Email non \xc3\xa8 valido\'))\n        )\n    ))\n    ->getForm();\n\n$form->handleRequest($request);\n\nif ($form->isSubmitted() && $request->isXmlHttpRequest()) {\n    $data = $form->getData();\n\n    if ($form->isValid()) {\n        // save ...\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

树枝模板:

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

当我提交表格时,我\xe2\x80\x8c\xe2\x80\x8c$request->getMethod()PUT,但我\xe2\x80\x8c\xe2\x80\x8c$form->isSubmitted()false

\n\n

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

\n\n
<input type="hidden" name="_method" value="PUT">\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n

E.K*_*.K. 5

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

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