Ste*_*lds 23 php forms symfony
我有一个在Symfony中构建的表单,当在视图中呈现时,html表单可能包含也可能不包含表单对象中的所有字段(实体类型具有几个不同的状态,并且并非所有字段都在风景).
问题是,当表单在提交处理程序中处理时,通过表单对象的handleRequest()方法,它将实体中不存在于post数据中的任何属性重置为null,从而吹掉任何现有值.
有没有办法告诉Symfony不要这么愚蠢,只处理POST数据中的字段?
或者我必须在handleRequest调用之前克隆实体,然后循环POST值并将post-handleRequest实体中的相关值复制到实体的pre-handleRequest克隆,因此我保留不在的字段POST数据.
唷!正如你所看到的,它有点愚蠢的解决方案,有点愚蠢的问题,tbh.
我可以理解symfony这样做,如果实体实际上是一个新创建的对象,但它已从DB加载然后调用handleRequest - 它应该足够明智地知道对象已经初始化并且只设置传入的字段发布数据.
谢谢你的帮助.
问候
史蒂夫.
qoo*_*mao 49
总之,不要使用handleRequest
.
您应该submit
直接使用,并将clearMissing
参数设置为false.
Symfony/Component/Form/FormInterface
/**
* Submits data to the form, transforms and validates it.
*
* @param null|string|array $submittedData The submitted data.
* @param bool $clearMissing Whether to set fields to NULL
* when they are missing in the
* submitted data.
*
* @return FormInterface The form instance
*
* @throws Exception\AlreadySubmittedException If the form has already been submitted.
*/
public function submit($submittedData, $clearMissing = true);
Run Code Online (Sandbox Code Playgroud)
当您使用handleRequest
它时,计算出您想要提交的数据,然后使用提交$form->submit($data, 'PATCH' !== $method);
,这意味着除非您使用该PATCH
方法提交了表单,否则它将清除字段.
要自己提交表格而不清除您可以使用...
$form->submit($request->get($form->getName()), false);
Run Code Online (Sandbox Code Playgroud)
..从请求中获取表单数据数组并直接提交,但明确缺少字段参数设置为false.
归档时间: |
|
查看次数: |
10285 次 |
最近记录: |