2012-06-07 24 views
3

我正在用Zend Framework創建一個表單來捕獲用戶的人口統計信息。我正在努力驗證兩個文本字段上的數字。爲什麼我的Zend驗證數字未被識別?

我建立我的形式../application/forms/UserDemographics.php這樣的:

class Application_Form_UserDemographics extends Zend_Form 
    { 
     public function init() 
     { 
      $this->form = new Zend_Form;    
      $dbAdapter = Zend_Registry::get("db"); 

         ... 

         $this->fax_number = new Zend_Form_Element_Text('fax_number'); 
      $this->fax_number->setLabel('Fax Number') 
       ->addFilter('Int') 
       ->addFilter('StripTags') 
       ->addValidator('Digits'); 

         $this->mobile_number = new Zend_Form_Element_Text('mobile_number'); 
      $this->mobile_number->setLabel('Mobile Number') 
       ->addFilter('Int') 
       ->addFilter('StripTags') 
       ->addValidator('Digits'); 

         ... 

       } 
     } 

我的數據庫是當前配置這樣與問候到fax_number和MOBILE_NUMBER領域,這樣我可以測試是否或者沒有數字被接受或不:

+-----------------+-------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+-----------------+-------------+------+-----+---------+----------------+ 
... 
| fax_number  | varchar(32) | NO |  | NULL |    
| mobile_number | int(15)  | YES |  | NULL |    
... 

當我輸入任何東西,但數字在任一在Zend形式的領域之一 - 不顯示錯誤消息,即使我已經加入到雙方的對數字的驗證元素。

文本輸入到移動號碼文本字段由0(零)代替在數據庫中:

mysql> select fax_number, mobile_number from user_demographics; 
+--------------------+---------------+ 
| fax_number   | mobile_number | 
+--------------------+---------------+ 
| var char no digits |    0 | 
+--------------------+---------------+ 

在最低限度的MOBILE_NUMBER字段應顯示一條錯誤消息,只有數字可進入文本字段,對不對?

爲什麼看起來數字驗證器不被識別?

這基本上表明數字驗證器幾乎被忽略。當表單呈現時,文本字段中有0(零),但是當我在文本字段中輸入文本時不顯示錯誤消息 - 即使對於在數據庫中設置爲int的移動號碼字段也沒有。

請指教?

回答

6

這是因爲過濾器在驗證器之前被處理。

那麼你的代碼確實是這樣的:

  1. 獲取用戶輸入的
  2. 將它轉換成int,這將在情況下爲0任何非可轉換文本包含
  3. 地帶的標籤
  4. 檢查輸入是否只包含數字,由於int濾波器,這將始終是這種情況。

因此,要解決這個問題,只需刪除INT-過濾器:

class Application_Form_UserDemographics extends Zend_Form 
{ 
    public function init() 
    { 
     $this->form = new Zend_Form;    
     $dbAdapter = Zend_Registry::get("db"); 

        ... 

        $this->fax_number = new Zend_Form_Element_Text('fax_number'); 
     $this->fax_number->setLabel('Fax Number') 
      ->addFilter('StripTags') 
      ->addValidator('Digits'); 

        $this->mobile_number = new Zend_Form_Element_Text('mobile_number'); 
     $this->mobile_number->setLabel('Mobile Number') 
      ->addFilter('StripTags') 
      ->addValidator('Digits'); 

        ... 

      } 
    } 
+0

HI,非常感謝您發表評論 - 只需要別人看它了。我一直忽略整型過濾器,因爲整個事情變得像一個包處理,並且int過濾器被卡在中間 - 完全忽略它。但是,謝謝!希望你的解釋能幫助別人理解事物的流動:) – marienke

+0

不客氣,恩克。很高興我的回答很有幫助。 –

相關問題