CodeIgniter set_message()

时间:2013-02-03 11:03:15

标签: codeigniter validation

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

$this->form_validation->set_message("is_unique", "%s already registered. Try a different %s");

而不是Username already registered. Try a different Username我得到Username already registered. Try a different users.username

虽然文档说If you include %s in your error string, it will be replaced with the "human" name you used for your field when you set your rules.

请让我离开陷阱。

4 个答案:

答案 0 :(得分:0)

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

以下是语言参考

Codeigniter Language Class

并且

Codeigntier Language Helper

答案 1 :(得分:0)

我遇到同样的问题,而我正在搜索时发现这个answer提到了Codeigniter中的行,它在第673行附近构建了错误消息(位于文件系统/ libraries / form_validation.php中):

    // 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);

}   

它对我来说很好。 我知道编辑系统库不是最佳做法,但也许它会对你有帮助。

答案 2 :(得分:0)

试试这个:

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

答案 3 :(得分:-2)

您可以使用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;