CUniqueValidator
在错误消息中支持自定义{value}
占位符,用于确切的情况,但不幸的是,映射到正在验证的属性的值(校验和),因此您无法利用它来显示名称。
此外,当rules()
由框架调用当前实例仍然是空的,所以$this->name
因为上面写的总是会有的name
属性的默认值 - 通常null
。
得到你想要的东西的唯一方法是延长CUniqueValidator
,也许是这样的:
class ExtendedUniqueValidator extends CUniqueValidator
{
public $additionalPlaceholders;
protected function addError($object,$attribute,$message,$params=array())
{
$params['{attribute}']=$object->getAttributeLabel($attribute);
$additional = array_filter(
array_map('trim', explode(',', $this->additionalPlaceholders)));
foreach ($additional as $attributeName) {
$params['{'.$attributeName.'}'] = $object->$attributeName;
}
$object->addError($attribute,strtr($message,$params));
}
}
然后,您可以定义与
'additionalPlaceholders' => 'name', // comma-separated list
'message' => 'Store {name} already exists on the database.',
验证规则
来源
2013-04-09 09:35:38
Jon