2013-02-03 4 views
6

Czy istnieje sposób na wymaganie tablicy elementów w metodzie Yii modelu rules()? Na przykład:Zasady sprawdzania poprawności Yii dla tablicy

public function rules() 
{ 
    return array(
      array('question[0],question[1],...,question[k]','require'), 
    ); 
} 

I zostały uruchomione w sytuacjach, w których muszę potwierdzić kilka tablic elementów pochodzących z formularza i nie wydaje się znaleźć dobry sposób będzie o niej inne niż robi powyżej. Ten sam problem występuje podczas określania attributeLables(). Jeśli ktoś ma jakąś radę lub lepszy sposób na to, naprawdę to doceniam.

+0

dlnGd0nG, link nie wspomina o tym, jak sprawdzać poprawność tablic elementów. – dataplayer

+0

Myślałem, że chcesz dodać tabelaryczne dane wejściowe. Jakie to jest 'pytanie [x]'? Czy są to atrybuty klasowe? a przez model Yii odnosisz się do czego? 'CActiveRecord',' CfromModel' lub 'CModel'? – dInGd0nG

+0

dlnGd0nG, "pytanie [x]" to wartości nazw przesyłanych formularzy. Wspomniany model Yii to w szczególności CFormModels. – dataplayer

Odpowiedz

13

Można używać aliasów CTypeValidator przez type

public function rules() 
{ 
    return array(
      array('question','type','type'=>'array','allowEmpty'=>false), 
    ); 
} 
+0

To jest dokładnie to, czego szukałem. Właśnie aliasy 'type', jak wspomniałeś: 'array ('question', 'CTypeValidator', 'type' => 'array', 'allowEmpty' => false),' i działało idealnie. Dzięki! – dataplayer

2

Z array('question','type','type'=>'array','allowEmpty'=>false), można po prostu sprawdzić, czy otrzymują dokładnie tablicę, ale nie wiem, co w środku tej tablicy. Aby sprawdzić poprawność elementów tablicy, powinieneś zrobić coś takiego:

<?php 

class TestForm extends CFormModel 
{ 
    public $ids; 

    public function rules() 
    { 
     return [ 
      ['ids', 'arrayOfInt', 'allowEmpty' => false], 
     ]; 
    } 

    public function arrayOfInt($attributeName, $params) 
    { 
     $allowEmpty = false; 
     if (isset($params['allowEmpty']) and is_bool($params['allowEmpty'])) { 
      $allowEmpty = $params['allowEmpty']; 
     } 
     if (!is_array($this->$attributeName)) { 
      $this->addError($attributeName, "$attributeName must be array."); 
     } 
     if (empty($this->$attributeName) and !$allowEmpty) { 
      $this->addError($attributeName, "$attributeName cannot be empty array."); 
     } 
     foreach ($this->$attributeName as $key => $value) { 
      if (!is_int($value)) { 
       $this->addError($attributeName, "$attributeName contains invalid value: $value."); 
      } 
     } 
    } 
}