php – Symfony2 – 如何停止Form-> handleRequest从null在post数据中不存在的字段

前端之家收集整理的这篇文章主要介绍了php – Symfony2 – 如何停止Form-> handleRequest从null在post数据中不存在的字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个在Symfony中构建的表单,并且在视图中呈现时,html表单可能包含也可能不包含表单对象中的所有字段(实体类型有几种不同的状态,并且不是所有字段都被包含在风景).

问题是,当在提交处理程序中处理表单时,通过表单对象的handleRequest()方法,将该实体中不存在于该数据中的任何属性重新设置为null,从而消除任何现有值.

有没有办法告诉Symfony不要那么愚蠢,只处理POST数据中存在的字段?

或者我必须在handleRequest调用之前克隆实体,然后循环遍历POST值,并将相关值从post-handleRequest实体复制到实体的pre-handleRequest克隆,因此我保留不在POST数据.

唷!正如你所看到的,它有点愚蠢的解决方案,有点尴尬的问题,tbh.

我可以理解symfony这样做,如果实体是一个新创建的对象,但它已经从DB加载,然后调用handleRequest – 它应该是明智的,知道该对象已被初始化,只设置在发布数据.

感谢任何帮助.

问候

史蒂夫.

总之,不要使用handleRequest.

您应该直接使用submit,而将clearMissing参数设置为false.

的Symfony /组件/表格/ 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);

当您使用handleRequest时,它会处理您想要提交的数据,然后使用$form-> submit($data,’PATCH’!== $method)提交它;这意味着除非您使用PATCH方法然后它会清除字段.

自己提交表单,不用清除可以使用…

$form->submit($request->get($form->getName()),false);

..它从请求中获取表单数据数组,并直接提交,但是将缺少的字段参数设置为false.

猜你在找的PHP相关文章