2012-11-28 5 views
2

Zend_Filter_Input을 사용하여 데이터를 필터링하고 유효성을 검사합니다. 값이 지금까지Zend_Filter_Input with Zend_Validate_InArray - 바늘로 배열을 가진 Validator

array('m', 'w'); 

에 너무 좋은 경우 필드 (성), 나는, 유효성을 검사 Zend_Validate_InArray을 사용하고 있습니다.
UnitTest를 실행하는 동안 빈 배열이 성별에 유효한 값이라는 것을 알았습니다.

$genderArray = array('m', 'w'); 
$needle = array(); 
if(in_array($needle, $genderArray)) { 
    Zend_Debug::dump('is in array'); 
} else { 
    Zend_Debug::dump('is not in array'); 
} 

$validator = new Tueks_Validate_InArray($genderArray); 
if ($validator->isValid($needle)) { 
    Zend_Debug::dump('is in array'); 
} else { 
    Zend_Debug::dump('is not in array'); 
} 

두 번, 내가 가지고 '배열에없는'
이를 분석하기 위해, 나는 다음과 같은 코드를 썼습니다.

그러나 나는 다음과 같은 코드를 사용할 때 :

$child = new Tueks_Placereport_Child(); 
$child->setGender($needle); 
$child->validate(); 

모든 작동 미세 (- 배열 ('m'의> 배열() IST 부분) 'w')?!?

$genderArray = array('m', 'w'); 
$filters = array(); 
$validators = array('gender'=> 
        array('presence'=> 'required', 
          new Tueks_Validate_InArray($genderArray) 
         ) 
        ); 
$input = new Zend_Filter_Input($filters, $validators, $this->_data); 

Tueks_Validate_InArray이 Zend_Validate_InArray 같지만 다른 메시지와 :

여기에 내 유효성 검증 메소드의 관련 부분이다. Zend_Filter_Input을 사용할 때 빈 배열이 유효한 값인 이유는 무엇입니까? 당신이 나를 도울 수 있기를 바랍니다.

+0

Btw, 실제로 작동 코드 스 니펫을 제공 한 경우 이전에 응답을 얻었을 것입니다. 누락 된 클래스 이름과 필드를 참조하면 처음부터 문제를 파악하기가 어렵습니다. –

답변

1

이것은 /는 Zend Framework에서 실제로 a bug입니다. thas은 아직까지 수정되지 않았습니다. 그리고 Zend_Filter_Input이 젠드 프레임 워크 2에서 단종되었으므로 앞으로도 그렇게 될지 의심 스럽습니다. 그러나이 문제를 해결해야하는 티켓에 첨부 된 패치가 있습니다.

나는 또한 약간의 디버깅을했고, Zend_Filter_Input의 방법 _validateRule으로 추적 할 수 있습니다 :이

이 코드 블록을 찾을 수 있습니다

if (!is_array($field)) { 
    $field = array($field); 
} 
[...] 
foreach ($field as $key => $value) { 
[...] 
    if (!$validatorChain->isValid($value)) { 

$field 필드의 값이 포함되어 있습니다. 보시다시피 배열이 아닌 값을 전달하면 배열로 전달되어 foreach 블록이 입력됩니다. 그러나 빈 배열을 전달하면 $fieldarray(0) {}으로 유지되므로 전체 foreach 블록이 입력되지 않습니다. 따라서 하나의 유효성 검사 (비어 있지 않은 검사가 아닌)가 수행됩니다.

또한 해결 방법을 찾으려고했지만 모두 다소 어색합니다. 따라서 가장 간단한 해결 방법은 $value이 빈 배열인지 확인하는 것입니다.

+0

안녕하세요, 답변 해 주셔서 감사합니다 .-- unitTest에서이 빈 Array-Test를 얼마 전에 삭제했습니다. 개발자가 빈 배열을 넘겨 줄 것이라고 생각하지 마십시오 ;-) – Tom