所以这是我的情况我正在设置一个表格,其中包含一个日期时间字段
$this->form->add(array(
'type' => 'Zend\Form\Element\DateTime',
'name' => 'date',
'options' => array(
'label' => 'published_from',
'format' => 'Y-m-d H:i:s'
),
'attributes' => array(
'class' => 'datePicker form-control',
'readonly' => 'readonly',
'data-type' => 'date'
),
));
没有最小/最大值或步骤,应用默认值,然后我以这样的形式显示它
<?php echo $this->formDateTime($form->get('date')); ?>
现在,一旦我提交此表单,内置验证过滤器就会启动并在通过所有初始验证后,它会触及类Zend \ Validator \ DateStep行347-362
if ($baseDate < $valueDate) {
while ($baseDate < $valueDate) {
$baseDate->add($step);
if ($baseDate == $valueDate) {
return true;
}
}
} else {
while ($baseDate > $valueDate) {
$baseDate->sub($step);
if ($baseDate == $valueDate) {
return true;
}
}
}
它落在一个明显无限的循环中并超时。如果是$ baseDate =
,$ baseDate和$ valueDate在第一次命中时的值object(DateTime)#345 (3) {
["date"]=> string(19) "1970-01-01 01:00:00"
["timezone_type"]=> int(3)
["timezone"]=> string(13) "Europe/London"
}
和$ valueDate =
object(DateTime)#442 (3) {
["date"]=> string(19) "2014-05-07 16:57:54"
["timezone_type"]=> int(3)
["timezone"]=> string(13) "Europe/London"
}
我做错了什么???
答案 0 :(得分:0)
虽然您没有最小值/最大值或步长,但错误表明您在某处设置了DateStep InputFilter:
$inputFilter->add( array(
'name' => 'deadline',
'required' => false,
'validators' => array(
array(
'name' => 'DateStep',
'options' => array(
'step' => new \DateInterval("P2D"),
'baseValue' => new \DateTime(),
'format' => 'd/m/Y H:i:s',
'messages' => array( \Zend\Validator\DateStep::NOT_STEP => 'Must be at least two days in the future'),
),
),
),
));
如果您将日期验证程序设置为使用DateTime:
,则会出现此执行时错误'type' => 'Zend\Form\Element\DateTime',
将其设置为:
'type' => 'Zend\Form\Element\Date',
代替。