在symfony2表单构建器中允许多种日期格式

时间:2013-03-26 16:51:54

标签: symfony

客户要求此。他希望允许生日字段使用多种日期格式。文档没有给我任何线索如何实现它,谷歌也没有。

之前有过这样的请求且有过如何实现这一要求的人?

目前它看起来像这样:

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

2 个答案:

答案 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事件上进行过滤,然后再进行验证。

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