我正在使用以下小部件来允许用户输入日期
$this->widgetSchema['first_registration'] = new sfWidgetFormDate(array(
'format' => '%month%/%year%',
'years' => range(date('Y', time()) - 15, date('Y', time()) + 15)
));
使用此窗口小部件的日期的默认格式为%month%/%day%/%year%,因此这是此窗口小部件的默认验证程序检查的内容。但是,我试图改变验证器......
$this->validatorSchema['first_registration'] = new sfValidatorDate(array(
'date_format' => '%month%/%year%',
'with_time' => false
));
这不起作用,我仍然收到无效错误。有人知道为什么吗?
答案 0 :(得分:3)
您的小部件和验证程序仍包含日期字段。
您的所有格式参数都是为了防止显示日期 - 它仍然存在并且正在幕后进行验证。我希望这就是问题发生的地方。
我建议最简单的解决方法是通过覆盖相关表单上的bind方法将日期默认为1。不知道你是怎么做的,但是当我处理月/年日期时,我经常在数据库中这样做,因为它允许本机日期/时间格式正常工作 - 同样的参数适用于symfony表单。
// untested code - i may have array structure/method signatures incorrect.
function bind($taintedValues = array(), $taintedFiles = array()) {
$taintedValues['first_registration']['day'] = 1;
return parent::bind($taintedValues, $taintedFiles);
}
此外,sfValidatorDate的date_format选项将正则表达式作为其参数,而不是sfWidgetFormDate中使用的格式。