使用sfValidatorSchema使用symfony验证日期

时间:2010-02-21 11:28:33

标签: php symfony1

我正在使用以下小部件来允许用户输入日期

$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
));

这不起作用,我仍然收到无效错误。有人知道为什么吗?

1 个答案:

答案 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中使用的格式。