2012-06-07 3 views
3

저는 사용자 인구 통계를 캡처하기 위해 Zend Framework로 양식을 만듭니다. 두 개의 텍스트 필드에서 숫자 유효성 검사에 어려움을 겪고 있습니다.Zend Validate Digits가 인식되지 않는 이유는 무엇입니까?

나는이 같은 ../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 |    
... 

내가 자리를 제외한 아무 것도 입력 할 때 - 오류 메시지가 내가 자리에 대한 검증이 모두에 추가 한 경우에도 표시되지 않습니다 집단. 숫자 만이 할 수 없다는 오류 메시지가 표시되어야 최소한

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

MOBILE_NUMBER 필드 :

이 텍스트는 데이터베이스에 0 (영)으로 교체되는 휴대 전화 번호 텍스트 필드에 입력 텍스트 입력란에 입력하셨습니까?

왜 Digits 유효성 검사기가 인식되지 않는 것 같습니까?

기본적으로 Digits 유효성 검사기가 거의 무시됨을 보여줍니다. 양식이 렌더링 될 때 텍스트 필드에는 0 (제로)이 있지만 텍스트 필드에 텍스트를 입력하면 오류 메시지가 표시되지 않으며 데이터베이스에 int로 설정된 mobile_number 필드조차도 표시되지 않습니다.

알려주십시오.

답변

6

이것은 필터가 유효성 검사기보다 먼저 처리되기 때문입니다.

  1. 비 convertable 텍스트 태그
  2. 스트립을 포함하는 경우에 0이됩니다
  3. 그것을 int로 변환 입력을 보자 :

    그래서 어떤 코드가하는 일은 다음은
  4. 입력에 숫자 만 포함되어 있는지 확인하십시오.이 필터는 int 필터로 인해 항상 사용됩니다.

그래서 단순히 INT-필터를 제거,이 문제를 해결하려면 :

HI, 당신은 코멘트를위한 감사합니다 순전히이
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

- 너무 그것을보고 다른 사람을 필요로했다. 전체가 패키지 거래처럼되었고 int 필터가 중간에 붙어 있었기 때문에 int 필터를 간과했습니다. 완전히 간과되었습니다. 하지만 고마워! 잘하면 당신의 설명은 다른 사람이 물건의 흐름을 이해하는 데 도움이됩니다 :) – marienke

+0

당신은 천만에, Enke. 다행 인 것은 다행이었습니다. –