我想知道是否有一种简单的方法可以为模型大量分配一组新的规则。
用例是我可以有一个验证器规则,其中包含一组特定模型的子规则。我想动态加载该模型,分配其属性(我知道该怎么做),然后批量分配规则集。规则如下:
'rules' => array(
array('road', 'string'),
array('town', 'string'),
array('county', 'string'),
array('post_code', 'string'),
array('telephone', 'integer')
)
我知道我可以通过单独选择类并手动构建验证器来实现这一点,但有没有简单的方法告诉Yii模型重新加载具有此规范的验证器?
答案 0 :(得分:0)
我实际上通过Github上的一个问题(https://github.com/yiisoft/yii/issues/987#issuecomment-8886072)找到了答案,其中提到了查看CModel
validatorList
。在浏览了这段源代码一段时间之后,我想出了以下代码,大部分来自CModel
本身:
$c=new EMongoModel();
foreach($this->rules as $rule){
if(isset($rule[0],$rule[1])) // attributes, validator name
$c->validatorList->add->add(CValidator::createValidator($rule[1],$this,$rule[0],array_slice($rule,2)));
else
throw new CException(Yii::t('yii','{class} has an invalid validation rule. The rule must specify attributes to be validated and the validator name.',
array('{class}'=>get_class($this))));
}
现在,这允许我获取一个类似于模型验证规则的数组元素列表,并在现场实际上将它们作为模型的验证规则。