7

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

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

フォームからの要素のいくつかの配列を検証する必要がある状況に遭遇しましたが、上記を実行する以外に良い方法が見つからないようです。を指定するときも同じ問題がありattributeLables()ます。誰かがこれを行うためのアドバイスやより良い方法を持っているなら、私は本当に感謝しています.

4

2 に答える 2

13

CTypeValidatorエイリアスを使用できますtype

public function rules()
{
   return array(
            array('question','type','type'=>'array','allowEmpty'=>false),
   );
}
于 2013-02-03T09:51:37.430 に答える
2

正確な配列を受け取ったことを確認できますが、このarray('question','type','type'=>'array','allowEmpty'=>false),配列の中身はわかりません。配列要素を検証するには、次のようにする必要があります。

<?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.");
            }
        }
    }
}
于 2015-06-17T12:02:52.950 に答える