我通过校验和验证一个新条目,校验和是所有条目的md5(),以查看该条目是否已经存在并且工作正常,但是对于规则消息,我希望显示条目"name“,而不是如下所示的唯一属性:
public function rules() {
return array_merge(parent::rules(), array(
array('checksum', 'unique', 'message' => 'Store ' . $this->name . 'already exists on the database.'),
));
}规则函数的$this->名称始终为空。有什么想法吗?
发布于 2013-04-09 17:35:39
对于这种情况,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-08 18:48:46
正被验证的对象在规则函数中是不可访问的,而Yii中的验证器使用了占位符机制。
我认为获得你想要的行为的正确方法是扩展uniqueValidator,在新的或现有的占位符中包含对象名称。
https://stackoverflow.com/questions/15876908
复制相似问题