2012-12-04 33 views
1

我想創建一個抽象類來管理輸入驗證 - 在這個類中我有靜態函數返回InputFilterInterface對象,然後我可以添加到處理數據的模型類中的接口。但是,即使數據有效,也沒有任何數據可以驗證。順便說一下,我沒有使用表單 - 數據通過Ajax而不是HTML表單進入。ZF2不驗證輸入使用InputFilter

這裏是我的代碼:

中央圖書館:

abastract class InputFilters { 
    public static function monthIDFilter($fieldName = 'monthID', $required = FALSE) { 
     $factory = new InputFactory(); 
     return $factory->createInputFilter(array(
      $fieldName => array(
       'name' => $fieldName, 
       'required' => $required, 
       'validators' => array(
        array('name' => 'not_empty'), 
        array('name' => 'string_length', 'options' => array(
         'min'=>'6', 'max'=>'6' 
        )), 
        array('name' => 'regex', 'options'=>array(
         'pattern' => '/^[0-9]{6}$/' 
        )) 
       ), 
      ) 
     )); 
    } 
} 

型號:

class DataModel implements \Zend\InputFilter\InputFilterAwareInterface { 
    protected $_inputFilter; 

    public function __construct() 
    { 
     $this->setInputFilter(InputFilters::monthIDFilter()); 
    } 

    public function setInputFilter(InputFilterInterface $inputfilter) 
    { 
     if(!$this->_inputFilter) { 
      $this->_inputFilter = new InputFilter(); 
     } 
     $this->_inputFilter->add($inputfilter); 
    } 

    public function getInputFilter() 
    { 
     if(!$this->_inputFilter) { 
      $this->_inputFilter = new InputFilter(); 
     } 
     return $this->_inputFilter; 
    } 
} 

最後,在控制器:

public function dataAction() 
{ 
    $model = new DataModel(); 
    $inputFilter = $model->getInputFilter(); 
    $inputFilter->setData($_REQUEST); 
    print_r($_REQUEST); 
    print_r($inputFilter->getValues()); 
    if ($inputFilter->isValid()) { 
     if ($inputFilter->has('monthID')) { 
      echo $inputFilter->getValue('monthID'); 
      $formMonth = $inputFilter->getValue('monthID'); 
     } else { 
      echo 'nope'; 
      $formMonth = ''; 
     } 
     $grid->setSqlString($formMonth); 
     $data = $grid->outputData(); 
     Json::out($data); 
    } 

在我的輸出,我看到了這個輸入包含我的monthID(201212)和一個應該是驗證結果的數組:Array([] => Array([monthID] =>))和'nope'這個詞表示has('monthID')檢查失敗。

有關我哪裏出錯的任何建議?

回答

0

嘗試將createInputFilter更改爲您的DataModel中的createInput。

return $factory->createInput(array(
     $fieldName => array(
      'name' => $fieldName, 
      'required' => $required, 
      'validators' => array(
       array('name' => 'not_empty'), 
       array('name' => 'string_length', 'options' => array(
        'min'=>'6', 'max'=>'6' 
       )), 
       array('name' => 'regex', 'options'=>array(
        'pattern' => '/^[0-9]{6}$/' 
       )) 
      ), 
     ) 
    ));