【问题标题】:CodeiIgniter: manually set per-field messages [duplicate]Codeigniter:手动设置每字段消息[重复]
【发布时间】:2013-05-05 13:53:24
【问题描述】:

我正在使用 CodeIgniter 的 form validation 及其每字段规则,但在某些情况下验证成功运行后,我想手动添加每字段错误消息并重新显示消息所在的表单显示为form_error('field_name')

我不是在谈论设置自定义的每条规则错误消息:

$this->form_validation->set_message('rule', 'Error Message');

而是一个看起来像这样的函数:

form_validation->add_message('field_name', 'my custom message')

【问题讨论】:

  • 深入代码,我找到了以这种方式直接访问消息数组的方法: form_validation->_field_data['field_name']['error'] = "My custom message" 。没那么优雅..
  • 您保存自定义错误消息的位置......
  • 是的,只是因为 PHP 让您可以轻松访问所有内部变量,所以我会要求 CodeIgniter 工作人员添加一个像上面这样的辅助函数
  • 您可以扩展库并添加您的自定义方法。
  • $this->form_validation->set_message('required', 'some message') 只是为名为 'required' 的规则重新定义消息。在我的情况下,验证运行没问题,但在我想为给定字段添加消息之后

标签: php codeigniter validation


【解决方案1】:

您必须扩展 form_validation,_field_data 属性受到保护,因此您无法在他的班级或他的子班级之外访问它。

$this->form_validation->set_message('required', 'some message') 也不起作用,因为 CI 仅在运行验证并且与验证规则关联时才会检查此数据。

库/MY_Form_validation.php

class MY_Form_validation extends CI_Form_validation {

    public function __construct() {
        parent::__construct();
    }

    public function add_message($field, $message) {
        //this field was validated without error
        if(isset($this->_field_data[$field]) AND 
         (!isset($this->_field_data[$field]['error']) OR !$this->_field_data[$field]['error']) )

            $this->_field_data[$field]['error'] = $message;
    }
}

$this->form_validation->add_message('field1', 'message for field1');
echo form_error('field1');

注意: validation_errors() 中的消息将不可用。 为此添加$this->_error_array[] = $message

【讨论】:

  • 感谢@lighta,在我的 CodeIgniter 版本中,_field_data 数组仍然是公开的,而在当前的 2.1.3 版本中已受到保护
  • 欢迎您。下次注意版本,不要让 CI 3.0 来更新你的 CI 应用程序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多