为避免使用多个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);
提交后在树枝中改写表格方法
<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
)上。
该功能将比较form方法和request方法,并防止它们不同时提交。
$method = $form->getConfig()->getMethod();
if ($method !== $request->getMethod()) {
return;
}
因此,我想知道这种情况背后的原因。为什么Symfony会检查表单和请求中的方法是否相同。
然后,可以纠正/绕过此问题吗?您会如何要求这样做?
答案 0 :(得分:1)
通常,当您要使用REST-ish方法时,您将希望尽可能地远离表单(按传统术语)。如您所知,传统形式仅支持POST
和GET
方法,因此PATCH
不起作用。
或者,您可以做的是
< ul>JSON
表示形式PATCH
HTTP请求,其中包含JSON
个新状态您的服务器端不应再handleRequest
,而应该$form->submit($data)
。 $data
应该从请求正文中反序列化JSON
(如果有)。如果您觉得自己很懒惰,可以使用捆绑软件:qandidate-labs/symfony-json-request-transformer:)
以此来绕过POST
/ GET
的格式限制,但是您仍然保留验证逻辑。
希望这对您有帮助...