Yii数组的验证规则

时间:2013-02-03 09:19:00

标签: php yii

有没有办法在Yii模型的rules()方法中要求一组元素? 例如:

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

我一直在遇到需要验证多个元素数组的情况 来自一个表格,除了做上述之外,我似乎无法找到一个好的方法。指定attributeLables()时遇到同样的问题。如果有人有一些建议或更好的方法,我会非常感激。

2 个答案:

答案 0 :(得分:13)

您可以使用CTypeValidator

之前的type别名
public function rules()
{
   return array(
            array('question','type','type'=>'array','allowEmpty'=>false),
   );
}

答案 1 :(得分: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.");
            }
        }
    }
}