2013-03-20 2 views
0

모델 클래스의 정수 배열을 검증하는 방법은 무엇입니까?ctypevalidator 정수 유효성 검사 배열

모델 클래스

어레이 ('marks_Mark은', 'CTypeValidator', '타입'=> '배열')

marks_Mark 배열이다.

보기

는 '>에 textField ($ 모델'marks_Mark [] 배열 ('값'=> $ 부가가치> marks_Mark '크기'=> $ 10 형상 - 에코 maxlength '=> 3));

다음 진행 방법은 무엇입니까?

답변

0

textField에서 항상 string을 수신하므로이 방법은 작동하지 않습니다. 내 생각 엔 사용자가 1, 2, 3과 같은 것을 입력하도록하고이 값들 각각이 정수인지 확인하고 싶습니까?

당신은 같은 일반 텍스트 필드를 사용할 수 있습니다

<?php echo $form->textField($model, 'marks') ?> 

그리고 사용자 정의 유효성 검사기 쓰기 : 당신은 검증 로직을 약간 조정할 수있다

array('marks', 'validateIntegerList') 

public function validateIntegerList($attribute, $params) 
{ 
    $message = isset($params['message']) ? 
     $params['message'] : 'Please only enter integers!'; 

    $value = $this->$attribute; 

    // User entered single number -> OK 
    if(ctype_digit(trim($value)) && strpos($value, ',')===false) 
     return; 

    // User entered list of numbers -> Check each 
    foreach(explode(',', $this->$attribute) as $value) { 
     if(!ctype_digit(trim($value))) { 
      $this->addError($attribute, $message); 
      return; 
     } 
    } 
} 

합니다. 그러나 그것은 당신에게 약간의 아이디어를 줄 것입니다.

+0

Harti ... 감사합니다. 빠른 답변입니다. 형제 님, foreground에 텍스트 필드를 넣었습니다. 그래서 컨트롤러에서는 배열 [pos]처럼 검색 할 것입니다. 희망을 이해합니다. –

+0

그런 경우에도 사용자 정의 유효성 검사기를 작성할 수 있습니다. '$ attribute' 배열로 작업하려면 예제를 수정할 수 있어야합니다. 우리는 여기서 일할 수 없다.) –