我正在尝试使用不同的错误消息设置codeigniter表单.
set_message(rule,msg)正在为整个表单设置一条消息.
我需要:
$this->form_validation->set_rules('name','First Name','required'); $this->form_validation->set_message('name','required','Enter your Name'); $this->form_validation->set_rules('second','Variables','required'); $this->form_validation->set_message('second','The Variables are required');
在这种情况下,将%s添加到消息字符串中没有帮助,因为消息必须完全不同.
可能我可以这样做:
调节器
$this->form_validation->set_rules('name','Name','required|min_length[6]|max_length[12]'); $this->form_validation->set_rules('second','required|min_length[3]|max_length[5]'); $this->form_validation->set_message('required','required'); $this->form_validation->set_message('min_length','short'); $this->form_validation->set_message('max_length','long');
视图
switch(form_error('name')) { case '<p>required</p>': echo 'Enter your Name'; break; case '<p>short</p>': echo 'min length 6'; break; case '<p>long</p>': echo 'min length 12'; break; } switch(form_error('second')) { case '<p>required</p>': echo 'The Variables are required'; break; case '<p>short</p>': echo 'min length 3'; break; case '<p>long</p>': echo 'min length 5'; break; }
但是,有没有更聪明的方法呢?
解决方法
我认为更聪明的方法是使用Codeigniter的回调功能(类似于下面的内容).以下工作,但可能更精简它.如果不出意外,这是一个起点.
创建两个回调函数(我将这些命名为custom_required和custom_check_length)并将它们放在控制器的底部(或者您认为必要的地方).
private function _custom_required($str,$func) { switch($func) { case 'name': $this->form_validation->set_message('custom_required','Enter your name'); return (trim($str) == '') ? FALSE : TRUE; break; case 'second': $this->form_validation->set_message('custom_required','The variables are required'); return (trim($str) == '') ? FALSE : TRUE; break; } }
和…
private function _custom_check_length($str,$params) { $val = explode(',',$params); $min = $val[0]; $max = $val[1]; if(strlen($str) <= $max && strlen($str) >= $min) { return TRUE; } elseif(strlen($str) < $min) { $this->form_validation->set_message('custom_check_length','Min length ' . $min); return FALSE; } elseif(strlen($str) > $max) { $this->form_validation->set_message('custom_check_length','Max length ' . $max); return FALSE; } }
这两个函数负责表单验证的set_message方面.要设置规则,您只需要通过在函数名前加上callback_来调用这两个函数.
所以…
$this->form_validation->set_rules('name','callback__custom_required[name]|callback__custom_check_length[6,12]'); $this->form_validation->set_rules('second','Second','callback__custom_required[second]|callback__custom_check_length[3,5]');
我希望以上有所帮助!!