2014-05-08 30 views
1
最大執行時間

所以這裏是我的情況我米設置一個形式,其中我包括一個日期時間字段ZF2的Zend 驗證 DateStep致命錯誤:30秒

$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 \驗證\所有初步驗證後提交此表的生成的驗證過濾踢DateStep lines 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,當它擊中值$ valueDate首先,如果是$ baseDate =

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" 
} 

我究竟做錯了???

+2

什麼是$步設置爲? – Farkie

+0

默認值是1秒我剛剛意識到這一點,所以錯誤判斷它是否有必要做數十億次迭代是有意義的,我想問題是爲什麼驗證的這一部分運行,如果沒有最小最大值(意味着一個不關心日期範圍,如果他沒有把這些值),如果只是想確定它是一個有效的日期怎麼辦?我想我會使用一個普通的文本字段,並添加一個日期驗證器的形式... – user3615713

回答

0

雖然你有沒有最大/最小值或步驟錯誤提示,你有一個DateStep輸入過濾設置的地方:

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

如果你有時間驗證設爲您將得到這個執行時間錯誤使用日期時間:

'type'  => 'Zend\Form\Element\DateTime', 

將其設置爲:

'type'  => 'Zend\Form\Element\Date', 

代替。

相關問題