1

一位客户要求这样做。他希望为生日字段允许多种日期格式。该文档没有给我任何线索如何实现它,谷歌也没有。

任何曾经经历过这样的请求并有领导如何实现这一目标的人?

目前它看起来像这样:

$builder->add('xxx', 'birthday', array('widget' => 'single_text', 'invalid_message' => 'some message (dd-MM-yyyy)', 'format' => 'dd-MM-yyyy'))
4

2 回答 2

1

在这种情况下不应使用数据转换器。

数据转换器的要点是在数据之间来回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在验证之前对事件进行数据过滤。

我从内存中编写了这个示例并没有对其进行测试,也许您应该对其进行调整(并添加您的字段选项而不是[...].

于 2014-06-12T14:46:46.657 回答
1

如果您想在表单中处理不同的日期格式,您应该查看 DataTransformer 它可以帮助您将数据从一种格式转换为另一种格式,例如:

2013-03-26 ==transform==> 2013/03/26
2013.03.26 ==transform==> 2013/03/26
26.03.2013 ==transform==> 2013/03/26
于 2013-03-26T17:02:42.067 回答