我有以下情况:
- 表单字段类型
date
- 类似于
dd.mm.YYYY
的验证模式 - 一个辅助对象,它变成
12
进入12.07.2012
或2.5
进入02.05.2012
等等
我的问题是:在哪里调用转换输入值的方法?
当我从 set
调用它时- 实体的方法,值实际上发生了变化。但是,当再次加载表单时(例如,不完整的提交),会显示旧值(如 2.5
),而不是转换后的值( 2.5.2012
)。现在,我如何告诉表单实体内的值已更改?
也许中间还有另一种方法:
$form->bindRequest($request);
// do some fancy stuff here
if ($form->isValid()) {}
PHP
这是来自实体:
/**
* @ORM\Column(type="datetime", nullable=true)
* @Assert\DateTime()
*/
protected $date_start;
这是来自类型:
$builder->add('date_start', 'datetime', array(
'label' => 'Start Datum/Uhrzeit',
'date_widget' => 'single_text',
'time_widget' => 'single_text',
'date_format' => 'dd.MM.yyyy',
'with_seconds' => false,
'required' => false,
));
最佳答案
有两种方法可以修改表单及其绑定(bind)的数据。您可以使用表单事件,有一个使用示例 here或者您可以使用 DataTransformer,其解释为 here
从你的案例来看,我认为 DataTransformer 最有意义。您以一种方式表示对象中的数据,但需要以不同的方式在表单中表示数据,并在提交表单时反转该转换。这就是 DataTransformer 的目的。
关于forms - Symfony2 : How to modify a form value before validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11348370/