2012-07-28 2 views
3

나는 다른 것을 봤다 questions/Google 그림. 내 문제는 notEmpty 유효성 검사기가있는 빈 텍스트 상자로 양식을 제출할 때 오류가 발생하지 않는다는 것입니다.Zend Framework notEmpty 유효성 검사기 setRequired

먼저 notEmptysetRequired의 차이점을 이해하고 싶습니다. 이해하는 바와 같이 요소가 제출되고 값이 비어 있으면 유효성 검사기 notEmpty이 오류를 발생시킵니다. 즉, 항목이 POST 데이터 (양식의 경우)에 존재하지 않으면 요소가 이 필요하지 않으면 오류가 생성되지 않습니다.. 요소가 이고 집합이 인 경우에만 실행됩니다. setRequired 메서드는 별도로 언급하지 않는 한 자동으로 notEmpty 유효성 검사기를 장면 뒤에 추가합니다. 이렇게하면 요소에 대한 항목이 존재해야하며 비어 있어서는 안됩니다. 옳은?

$username = new Zend_Form_Element_Text('txtUsername'); 
$username->addValidator(new Zend_Validate_NotEmpty(), true); 

그리고 다른 텍스트 필드 같은 : 내가 너무 좋아 notEmpty 유효성 검사기를 추가 곳

지금, 나는 내 양식이 논리를 사용하려고 노력했다. 내가 값을 입력하지 않고 내 양식을 제출, 내 POST 데이터는 다음과 같습니다

(
    [txtUsername] => 
    [txtPassword] => 
    [txtRepeatPassword] => 
) 

그러나, isValid 여전히 true로 평가하고 오류 메시지가 생성되지 않습니다. 왜? 요소가 POST 데이터에 항목을 가지고 있기 때문에 notEmpty 유효성 검사기가 값이 비어 있다고 결정하면 안됩니까? setRequired(true)을 사용하면 원하는 방식으로 작동합니다. 값이 빈 문자열 일 때 사용자 이름이 비어 있지 않다고 판단하는 것만으로도 엉망이됩니다. :-)

미리 감사드립니다.

답변

5

나는 이것이 약간 혼란 스럽다는 데 동의합니다. 그 이유는 모든 양식 요소가 allowEmpty 플래그 (기본값 : true)를 가지므로 값이 비어 있으면 유효성 검사를 건너 뜁니다. 사용자가 ''로, 자신의 생년월일을 입력하지 않도록 선택한 경우이 항상 검증을 실패

$dateOfBirth = new Zend_Form_Element_Text('dob'); 
$dateOfBirth->setLabel('Date of birth (optional)'); 
$dateOfBirth->addValidator(new Zend_Validate_Date()); 
$form->addElement($dateOfBirth); 

유효한 날짜되지 않습니다 : 그렇지 않으면, 선택적 요소에 유효성 검사기를 추가하는 진짜 고통이 될 것입니다 때문에, 예를 들어,이 방식으로 작동합니다 . allowEmpty 플래그가 기본적으로 설정되어 있으면 예상대로 작동합니다 (입력 한 날짜 만 유효성을 검사합니다).

setRequired(true)을 호출하면 NotEmpty 유효성 검사기가 추가되지만 allowEmpty 플래그도 false로 설정됩니다. 나는 당신이이 접근법을 고수 할 것을 권한다. 또는 플래그를 설정하여 작업 할 수 있습니다.

$username = new Zend_Form_Element_Text('txtUsername'); 
$username->addValidator(new Zend_Validate_NotEmpty()); 
$username->setAllowEmpty(false); 
+0

미리 'setAllowEmpty'가 표시되었지만'notEmpty'를 사용하는 다른 방법이라고 생각했습니다. 선택 요소를 사용하면 좋은 점을 알 수 있습니다. 훌륭한 답변을 해주셔서 감사합니다. – Andy0708