symfony DateType表单字段可以允许其他格式吗?



在symfony4表单中,我有一个DateType字段,效果很好,我喜欢验证和自动处理随之而来的错误消息。

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('dob', DateType::class, [
'widget' => 'single_text',
'format' => 'M/d/yy',
]);
}

我希望能够允许用户使用 2 位数或 4 位数的年份,并且都通过验证。

似乎一种繁琐的方法是在传递给控制器中的handleRequest()方法之前修改 Request 对象中的这个特定表单元素,但这会很混乱并且与我的代码紧密绑定。

一个非常好的方法(不存在(是拥有类似其他选项的东西'alternate_format' => 'M/d/yyyy'.

有没有人有更直接的方法?

现在我已经用一些客户端javascript解决了我的问题。如果其他人需要类似的东西,我的日期字段是出生日期,如果我接受我没有超过 100 岁的人的限制,那么这个解决方案非常适合我的目的。[编辑:仅当您强制使用 2 位数的年份时,此限制才成立。如果您将格式设置为 4 位数的年份,然后使用 JavaScript 按摩到相同的年份,则没有这样的限制。下面的脚本确实假定日期不能是将来的日期,这适用于出生日期字段。

在我的表单中,我在我的字段中添加了一个类,并假设格式应该有一个 4 位数的年份:

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('dob', DateType::class, [
'widget' => 'single_text',
'format' => 'M/d/yyyy',
'attr' => ['class' => 'js-dob'],
])
}

然后在客户端,我有这个在提交时运行的小片段:

$('.js-save-button').on('click', function() {
// convert 2-digit years to 4-digit version in dob field
$('.js-dob').each(function() {
let date = new Date($(this).val());
if (date instanceof Date && !isNaN(date)) {
if (date > new Date()) {
date.setFullYear(date.getFullYear() - 100);
}
}
$(this).val(date.toLocaleDateString("en-US"));
});
});

最新更新