一位客户要求这样做。他希望为生日字段允许多种日期格式。该文档没有给我任何线索如何实现它,谷歌也没有。
任何曾经经历过这样的请求并有领导如何实现这一目标的人?
目前它看起来像这样:
$builder->add('xxx', 'birthday', array('widget' => 'single_text', 'invalid_message' => 'some message (dd-MM-yyyy)', 'format' => 'dd-MM-yyyy'))
一位客户要求这样做。他希望为生日字段允许多种日期格式。该文档没有给我任何线索如何实现它,谷歌也没有。
任何曾经经历过这样的请求并有领导如何实现这一目标的人?
目前它看起来像这样:
$builder->add('xxx', 'birthday', array('widget' => 'single_text', 'invalid_message' => 'some message (dd-MM-yyyy)', 'format' => 'dd-MM-yyyy'))
在这种情况下不应使用数据转换器。
数据转换器的要点是在数据之间来回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
在验证之前对事件进行数据过滤。
我从内存中编写了这个示例并没有对其进行测试,也许您应该对其进行调整(并添加您的字段选项而不是[...]
.
如果您想在表单中处理不同的日期格式,您应该查看 DataTransformer 它可以帮助您将数据从一种格式转换为另一种格式,例如:
2013-03-26 ==transform==> 2013/03/26
2013.03.26 ==transform==> 2013/03/26
26.03.2013 ==transform==> 2013/03/26