我必须在FormType中添加一个表单事件监听器(PRE_SUBMIT),以便根据用户提交的另一个字段的值设置字段的默认值:
//In my FormType:
public function onPreSubmit(FormEvent $event)
{
$formData = $event->getData();
if (empty($formData['time_until'])) {
$date = new \DateTime($formData['time_from']);
$date->add(new \DateInterval('PT1H'));
$formData['time_until'] = $date->format('Y-m-d H:i');
}
$event->setData($formData);
}
time_unti
键已设置,稍后其值会映射到表单的time_until
字段datetime
类型:
->add('time_until', datetime, [
'required' => false,
'input' => 'datetime',
'widget' => 'single_text',
'format' => 'yyyy-MM-dd HH:mm',
'label' => false,
])
到目前为止没问题。但是,我需要访问控制器中表单字段的规范化值,而不是在调用DateTime
之后访问表单上的$form->handleRequest($request);
个对象
通过“标准化”,我的意思是我希望能够做到:
$form->get('time_until')
并返回“yyyy-MM-dd HH:mm”形式的字符串,而不是DateTime
键下的表单中存储的time_until
对象。
建议将不胜感激。谢谢!
答案 0 :(得分:0)
您可以在表单类型中添加一些属性$normalizedTimeUntil
+添加将返回此值的getter getNormalizedTimeUntil()
。然后在Form事件中你可以设置这个属性,在控制器中你可以用getter函数将它拉出表单类型对象
或者您可以添加非映射字符串表单字段timeUntilString
(http://symfony.com/doc/current/reference/forms/types/form.html#mapped)并填写表单事件
或者您可以添加转换器(http://symfony.com/doc/current/cookbook/form/data_transformers.html)以将此Datetime对象转换为字符串。如果您需要在数据库中以字符串形式存储日期,那么这将是一种便利。然后表单字段getter将在控制器中返回字符串(并且也将以字符串形式存储在db中)