我有一个简单的表单,我使用 jquery UI 日期选择器进行生日输入。
在服务器端,我使用 symfony 验证和日期验证。
问题是验证只接受这种格式的输入:YYYY-MM-DD
但在英国等其他当地人中,格式为:DD/MM/YYYY
服务器给出错误。
你有什么建议吗?
我使用带有内部验证的 symfony 表单对象,所以我不希望手动强制更改格式。
我有一个简单的表单,我使用 jquery UI 日期选择器进行生日输入。
在服务器端,我使用 symfony 验证和日期验证。
问题是验证只接受这种格式的输入:YYYY-MM-DD
但在英国等其他当地人中,格式为:DD/MM/YYYY
服务器给出错误。
你有什么建议吗?
我使用带有内部验证的 symfony 表单对象,所以我不希望手动强制更改格式。
从文档“ date ”中可以看出,约束日期仅执行验证格式“YYYY-MM-DD”。
所以你有两个选择:
一种(最简单最合乎逻辑的)是在表单域“格式”中手动设置格式:
$builder->add('date', 'date', array(
'widget' => 'single_text',
'format' => 'dd-MM-yyyy',
));
这样,表单本身就会反转日期并将正确的格式传递给验证器(和数据库)。
另一种是创建一个约束回调“回调”,并创建自己的验证逻辑。
还有另一种方式,即使它插入到字符串的键中,它也是约束正则表达式“ regex ”。
这样,您将需要创建一个非常精确(和复杂)的正则表达式。
对于一个简单的问题,第一个解决方案是最合适的!
编辑:
jquery ui datepicker 锁定到输入类型文本,您不需要手动创建它。
正如我在示例中所写,如果您使用'widget' => 'single_text'
将产生一个输入类型的文本!
您可以为日期字段设置一个类,以便与 jquery 挂钩。
一个简短的例子:
形式:
$builder->add('date', 'date', array(
'widget' => 'single_text',
'format' => 'dd-MM-yyyy',
'attr' => array(
'class' => 'your_class'),
));
javascript:
$(function() {
$( ".your_class" ).datepicker();
});