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 回答