疯了,用Symfony 3。
问题是:将值设置为Symfony表单的正确方法是什么,只需设置viewData而不是modelData,表单将处理转换? < / p>
...带有一个小的捕获:没有通常的表单/请求创建和处理。 :)
类似的东西(假设我们在数据库中设置了一个DateTime字段):
$form = $this->createForm(ProperForm::class, $existingData);
$form->setPlainScreenFormattedData('myDateField', '11/29/2016');
将给定的日期转换为正确的\ Datetime对象,并在表单中很好地设置它?
我正在使用一个软件包进行内联编辑HTML表数据(Tabledit),并且必须保留该软件包(由于时间/空间问题)。它将以下数据(通过ajax)发送到服务器:
这一切都很好并且可以与保存控制器一起使用 - 只要它与纯文本数据一起使用即可。当您尝试使用它更改EntityType或某个Datetime字段时 - 它会中断。 它打破了,因为我尝试将一个简单的屏幕格式化值设置为表单的形式或底层对象。
为了防止破坏,仍然有一个一对一的解决方案,我尝试了各种形式的创建给定的表单并使用,例如:
- $form->get($field)->setData($value)
- $form->setData([$field => $value)])
- $form->getData()->AProperFieldSetterName($value)
以及更多(例如here),但这些都不起作用,因为基本上所有这些都期望$ value为 modelData (就像它一样)说here)。
我不想为此创建新的数据转换器 - 因为它们已经存在,Symfony知道这种形式及其底层对象结构。 此外,我不想更改现有解决方案,并停止向控制器发送单个字段以进行更新。
我可以通过创建一些手动调用来解决这个问题,首先根据给定的ID(如$em->getRepository('somerepo')->find($value)
(对于实体),或者手动创建日期时间),为每个字段获取正确的水合对象,然后将其提供给表格)但这一切似乎都是不好的,并使现有的功能加倍。
有一种简单的方法可以进行数据转换吗?感觉应该有一个。或者我是否走进了非Symfony的方式而迷路了?
答案 0 :(得分:0)
我认为您可以使用\Symfony\Component\Form\FormInterface::submit