客户要求此。他希望允许生日字段使用多种日期格式。文档没有给我任何线索如何实现它,谷歌也没有。
之前有过这样的请求且有过如何实现这一要求的人?
目前它看起来像这样:
$builder->add('xxx', 'birthday', array('widget' => 'single_text', 'invalid_message' => 'some message (dd-MM-yyyy)', 'format' => 'dd-MM-yyyy'))
答案 0 :(得分:1)
如果您想在表单中处理不同的日期格式,则应该查看DataTransformer 它可以帮助您将数据从一种格式转换为另一种格式,例如:
2013-03-26 ==transform==> 2013/03/26
2013.03.26 ==transform==> 2013/03/26
26.03.2013 ==transform==> 2013/03/26
答案 1 :(得分:1)
在这种情况下,数据转换器应 NOT 。
数据转换器的要点是在view <=> norm <=> model
之间来回转换数据 。
不是你的情况,你不想进行双向转换。
您想要的是过滤数据,为此,您可以使用表单事件:
$builder->add(
$builder
->create('xxx', 'birthday', [...])
->addEventListener(
FormEvents::PRE_SUBMIT,
function(FormEvent $event) {
$value = $event->getData();
// Do the filtering you want (for example replacement of special chars with a dash)
// $value = preg_replace('[^\d]', '-', $value)
$event->setData($value);
}
)
);
完成后,数据将在PRE_SUBMIT
事件上进行过滤,然后再进行验证。
我是从内存中写下这个例子并没有对它进行测试,也许你应该对它进行调整(并添加你的字段选项而不是[...]
。