2013-02-03 9 views
6

Yiiモデルのrules()メソッドで要素の配列を要求する方法はありますか?たとえば :配列のYii検証規則

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

私は 私は要素の複数のアレイを検証する必要がある状況に実行している形から来て、私がやっ以外のそれについて行くの良い方法を見つけるように見えることはできませんされています上記。私はattributeLables()を指定するときに同じ問題があります。誰かがこれを行うためのアドバイスやより良い方法を持っているなら、私は本当にそれを感謝します。

+0

dlnGd0nGのようにする必要があります。リンクに要素の配列を検証する方法は記載されていません。 – dataplayer

+0

表形式の入力を追加したいと思っていました。それらの 'question [x]'は何ですか?彼らはクラス属性ですか?そして、あなたは何を参照してYiiモデルによって? 'CActiveRecord'、' CfromModel'または 'CModel'ですか? – dInGd0nG

+0

dlnGd0nGの 'question [x]'は、私が投稿しているフォームの名前の値です。私が言及するYiiモデルは特にCFormModelsです。 – dataplayer

答えて

13

あなたはちょうどあなたが正確に配列を受け取ることを確認することができますが、あなたは何をこの配列内の知らないarray('question','type','type'=>'array','allowEmpty'=>false),type

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

それは私が探していたものです。私は 'array '(' question '、' CTypeValidator '、' type '=>' array '、' allowEmpty '=> false)というように'タイプ 'のエイリアスをつけただけです。ありがとう! – dataplayer

2

で別名CTypeValidatorを使用することができます。配列要素を検証するには、

<?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."); 
      } 
     } 
    } 
}