首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模型规则上显示另一个属性值错误消息

在模型规则上显示另一个属性值错误消息
EN

Stack Overflow用户
提问于 2013-04-08 18:32:55
回答 2查看 529关注 0票数 0

我通过校验和验证一个新条目,校验和是所有条目的md5(),以查看该条目是否已经存在并且工作正常,但是对于规则消息,我希望显示条目"name“,而不是如下所示的唯一属性:

代码语言:javascript
复制
public function rules() {
    return array_merge(parent::rules(), array(
        array('checksum', 'unique', 'message' => 'Store ' . $this->name . 'already exists on the database.'),
    ));
}

规则函数的$this->名称始终为空。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2013-04-09 17:35:39

对于这种情况,CUniqueValidator支持在错误消息中使用自定义校验占位符,但不幸的是,该占位符映射到正在验证的属性的值(校验和),因此您不能使用{value}利用它来显示名称。

此外,当框架调用rules()时,当前实例仍然是空的,因此上面编写的$this->name将始终具有name属性的默认值--通常为null

获得所需内容的唯一方法是扩展CUniqueValidator,可能如下所示:

代码语言:javascript
复制
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));
    }
}

代码语言:javascript
复制
'additionalPlaceholders' => 'name', // comma-separated list
'message' => 'Store {name} already exists on the database.',
票数 2
EN

Stack Overflow用户

发布于 2013-04-08 18:48:46

正被验证的对象在规则函数中是不可访问的,而Yii中的验证器使用了占位符机制。

我认为获得你想要的行为的正确方法是扩展uniqueValidator,在新的或现有的占位符中包含对象名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15876908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档