2013-03-20 79 views
0

如何驗證模型類中的整數數組?ctypevalidator整數驗證數組

模型類

陣列( 'marks_Mark', 'CTypeValidator', '類型'=> '陣列')

marks_Mark是一個數組。

視圖

回聲$形式 - >文本字段($模型, '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 ...感謝您的快速回復。兄弟在視圖中我已經把textfield放在d foreach中。所以在控制器中,我將以數組[pos]的形式檢索它。希望你明白。 – 2013-03-20 19:01:01

+0

即使在這種情況下,您也可以編寫自定義驗證器。您應該可以修改我的示例以使用'$ attribute'作爲數組。我們不能在這裏做你的工作;) – 2013-03-21 08:58:47