CodeIgniter设置_消息()

CodeIgniter设置_消息(),codeigniter,validation,Codeigniter,Validation,当我试图使用以下语句在CodeIgniter中的from_validation library下设置错误的自定义消息时 $this->form_validation->set_message("is_unique", "%s already registered. Try a different %s"); 而不是获取已注册的用户名。请尝试其他用户名我已注册了用户名。请尝试其他用户。用户名 文档中说,如果在错误字符串中包含%s,则当您设置规则时,它将替换为字段中使用的“人类”名称。

当我试图使用以下语句在CodeIgniter中的from_validation library下设置错误的自定义消息时

$this->form_validation->set_message("is_unique", "%s already registered. Try a different %s");
而不是获取已注册的
用户名。请尝试其他用户名
我已注册了
用户名。请尝试其他用户。用户名

文档中说,如果在错误字符串中包含%s,则当您设置规则时,它将替换为字段中使用的“人类”名称。


请让我离开陷阱。

您可以使用codigniter的消息库设置自定义消息

比如说 在这样的模型编码中

if(duplicate_user_name ==true){
    $this->messages->add('$user already registered. Try a different $user ', 'error');
}
并使用以下视图打印此邮件

$messages = $this->messages->get(); 
            if (is_array($messages)):
                foreach ($messages as $type => $msgs):
                    if (count($msgs > 0)):
                        foreach ($msgs as $message):
                            echo ('<div class="' .  $type .'">' . $message . '</div>');
                       endforeach;
                   endif;
                endforeach;
            endif;
$messages=$this->messages->get();
如果(是_数组($messages)):
foreach($type=>$msgs的消息):
如果(计数($msgs>0)):
foreach($msgs作为$message):
回声(“.$message.”);
endforeach;
endif;
endforeach;
endif;

查看您的问题,您使用的语言文件似乎没有索引user.username。在用户语言文件中定义它并查看发生了什么

这里是对语言的引用


我遇到了同样的问题,在搜索过程中,我发现了这个问题,其中提到了Codeigniter中构建错误消息的那一行(位于文件系统/libraries/form_validation.php中),靠近第673行:

    // Build the error message
$message = sprintf($line, $this->_translate_fieldname($row['label']), $param);
我将其编辑为:

// Build the error message
if($rule == 'is_unique') {                                      //my code here

    $vars_num = substr_count($line, '%s');                      //my code here
    for($i = 0; $i < $vars_num; $i++){                          //my code here
        $params[] = $this->_translate_fieldname($row['label']); //my code here
    }                                                           //my code here
    $message = vsprintf($line, $params);                        //my code here

} else {                                                        //my code here

    $message = sprintf($line, $this->_translate_fieldname($row['label']), $param);

}   
//生成错误消息
如果($rule=='is_unique'){//我的代码在这里
$vars_num=substr_count($line,'%s');//这里是我的代码
对于($i=0;$i<$vars_num;$i++){//我的代码在这里
$params[]=$this->_translate_fieldname($row['label']);//这里是我的代码
}//这里是我的代码
$message=vsprintf($line,$params);//这里是我的代码
}else{//我的代码在这里
$message=sprintf($line,$this->_translate_fieldname($row['label']),$param);
}   
这对我来说很好。 我知道编辑系统库不是最佳做法,但可能会对您有所帮助。

尝试以下方法:

$this->form_validation->set_message("is_unique", "{field} already registered. Try a different {field}");

这是我知道的最好的答案,更多信息请参见编辑后的答案