2012-06-30 154 views
2

我想要一個具有浮點數驗證的窗體。 驗證時,它不會讓我點擊提交按鈕,並會顯示正確的錯誤信息。浮點數驗證形式

我正在使用zend框架2,並在我的表單中我想檢索酒精量。

我嘗試使用下面的代碼:

$this->add($factory->createElement(array(
      'name' => 'alcohol_vol', 
      'attributes' => array(
        'label' => 'alcohol vol%:', 
        'filters' => array('Float'), 
        'type' => 'text', 
        'required' => true, 
      ), 
    ))); 

這並不做任何實際。如果我輸入普通文本,它會通過驗證。

我也嘗試將類型從'文本'更改爲'數字',但它不會允許我使用浮動數字。這將只允許無浮數:)

+0

如果驗證沒有因爲ZF 1.x的變化不大,那麼你需要的關鍵'validators' ,而不是「過濾器」。 – bububaba

+0

不幸的是,將「Float」添加到驗證器數組並沒有改變任何內容。 – ufk

回答

2

有一個在ZF2沒有「浮動」過濾器,我想可能你想要的是「浮動」驗證,浮法驗證可加入到ZF2形式是這樣的:

$this->add($factory->createElement(array(
     'name' => 'alcohol_vol', 
     'attributes' => array(
       'label' => 'alcohol vol%:', 
       'type' => 'text', 
     ), 
))); 
$factory = new Zend\InputFilter\Factory(); 

$this->setInputFilter($factory->createInputFilter(array(
    'alcohol_vol' =>  array(
     'name' => 'alcohol_vol', 
     'required' => true, 
     'validators' => array(
      array(
       'name' => 'Float', 
      ), 
     ), 
    ), 
))); 

然後你應該在控制器中驗證表單,上面的驗證器仍然應該設置爲表單。如果輸入不浮動,輸入元素將有無效的消息:

$form->setData($userInputData); 
if (!$form->isValid()) { 
    $inputFilter = $form->getInputFilter(); 
    $invalids = $inputFilter->getInvalidInput(); 
    var_dump($invalids); 
    // output: 'abc' does not appear to be a float 
} 
+0

感謝您的信息。你讓我更好地理解如何使用驗證器。問題是這不會在用戶填寫表單時添加javascript檢查。這僅在用戶提交表單後纔會添加驗證。 – ufk

1

我想你可以使用此過濾器

new Zend\I18n\Filter\NumberFormat("en_US", NumberFormatter::TYPE_DOUBLE);