1

我有一个使用 CActiveRecord 表示键值设置的模型。

数据库表的结构如下:

| Field       | Type         |
| key         | varchar(255) |
| category    | varchar(255) |
| default     | varchar(255) |
| is_editable | tinyint(1)   |
| is_required | tinyint(1)   |
| name        | varchar(255) |
| description | text         |
| value       | varchar(255) |
| create_at   | datetime     |
| update_at   | datetime     |

需要做的是value只有在is_required属性为时才需要参数true

is_required一次添加属性,当场景为create

我猜该过程应该使用自定义验证方法进行。

4

1 回答 1

0

这是问题的解决方案:

rules()方法应类似于:

public function rules()
{
    return array(
        array('key', 'required'),
        array('name, is_required, default', 'required', 'on'=>'create'),
        array('key, category, default, type, name, value', 'length', 'max'=>255),
        array('category, value, name, is_required', 'safe'),
    );
}

我们可以覆盖该isAttributeRequired函数,以便它考虑到额外的检查。

public function isAttributeRequired($attribute)
{
    if($attribute == 'value' && $this->is_required)
        return true;

    return parent::isAttributeRequired($attribute);
}
于 2013-08-23T10:28:17.533 回答