【发布时间】:2018-12-23 17:19:12
【问题描述】:
为避免使用多个FormType 文件,我正在使用PATCH 方法提交一个表单。
但是 symfony handleRequest() 没有提交,因为表单配置和请求的方法不同。
首先,在控制器中设置表单方法(能够提交)
$form=$this->createForm(UtilisateurType::class, $utilisateur, array(
'action'=>$this->generateUrl('security_edit_user', array('id'=>$utilisateur->getId())),
'method'=>'POST',
));
$form->handleRequest($request);
然后在提交时覆盖twig中的表单方法
<form action="{{ form.vars.action }}" method="{{ form.vars.method }}" name="{{ form.vars.name }}" enctype="multipart/form-data">
<!-- editor-fold -->
<input name="_method" type="hidden" value="PATCH">
<!-- editor-fold -->
</form>
问题在于handleRequest()函数(vendor/symfony/symfony/src/Symfony/Component/Form/Extension/HttpFoundation/HttpFoundationRequestHandler.php)。
该函数将比较表单方法和请求方法,如果它们不同,则阻止提交。
$method = $form->getConfig()->getMethod();
if ($method !== $request->getMethod()) {
return;
}
因此,我想知道这种情况背后的原因。为什么 Symfony 会检查表单和请求的方法是否相同。
那么,是否可以纠正/绕过这个问题?你会建议怎么做?
【问题讨论】:
标签: php symfony symfony-forms symfony-3.4