Forms Codeigniter中表单验证的扩展

Forms Codeigniter中表单验证的扩展,forms,validation,codeigniter,Forms,Validation,Codeigniter,我已经将这个名为“My_Form_validation.php”的类文件放在了“application/core”中,并且还尝试将它放在了“application/libraries”中 在我的控制器中,我正在使用 $this->form_validation->set_rules('user_postcode', 'Postcode', 'valid_postcode|trim|required|xss_clean'); 这就是My_Form_validation.php中的内容

我已经将这个名为“My_Form_validation.php”的类文件放在了“application/core”中,并且还尝试将它放在了“application/libraries”中

在我的控制器中,我正在使用

$this->form_validation->set_rules('user_postcode', 'Postcode', 'valid_postcode|trim|required|xss_clean');
这就是My_Form_validation.php中的内容-这里不讨论实际逻辑,因为我有两个选项来实际验证邮政编码。我需要帮助的是理解为什么它没有加载或被调用

我的CI版本是 定义(“CI_版本”、“2.0.2”)


因为您扩展的是CodeIgniter库而不是核心组件,所以您希望将其放入
应用程序/库
(而不是
应用程序/核心

当然,不要忘记在控制器代码中加载
表单验证

$this->load->library('form_validation');
其他需要检查的事项:

  • 文件名区分大小写(
    MY\u Form\u validation.php
    加载,而
    MY\u Form\u validation.php
    不会加载)
  • 类名区分大小写(类
    MY\u Form\u验证
    扩展
    CI\u Form\u验证
参考资料:


您必须在_构造方法上添加$rules,并将其传递给父构造函数

例如:


查看Form_验证并提供相同的变量。

我知道这很古老,但为了防止其他人在现代像我一样偶然发现这一点,这里有一个简单的例子。(目前正在使用3.0.6,但我相信这也适用于2。)


健全性检查:1)文件是
application/libraries/MY_Form_validation.php
,2)
$config['subclass_prefix']='MY_',3)您的配置日志阈值将输出调试消息(并且文件权限允许它)没有线索。我必须使用各种
var\u dump()
die()
调用对其进行鸟枪式调试……您是否尝试过编辑language/english/form\u validation\u lang.php文件,而不是在方法中设置消息?类似这样:
$lang['valid_postcode']=“请输入有效的邮政编码”应该是我的而不是我的。看起来您使用的是后者,因为您的问题参考了我的表单验证的内容。phpI遇到了与此相同的问题,我正确放置了文件,文件名正确。我在控制器中加载库。一切都安排好了。但是没有加载自定义验证中的方法。我收到消息“找不到验证规则:is_Fieldunique”。为什么会这样?我在
MY\u Form\u validation
文件和文件名中尝试了所有不同类型的资本化,但都不起作用。根据用户使用的CI版本,可能会有变化吗?@Timperson:我也这么做了。你能想出解决这个问题的办法吗?为了让它正常工作,我做了无数的噩梦。我的文件和类都被命名为
My\u form\u validation
,而不是
My\u form\u validation
。我现在在踢我自己。这不仅有意义,而且有效。我不敢相信我忽略了传递规则数组。干得好+1
$CI->form_validation==$this
fyi。不需要获取实例。
$this->load->library('form_validation');
function __construct($rules = array())
{
    parent::__construct($rules);
}
class MY_Form_validation extends CI_Form_validation { // Capitalization matters

  protected $CI;

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

  /**
   * Valid Date
   *
   * Verify that the date value provided can be converted to a valid unix timestamp
   *
   * @param string  $str
   * @return    bool
   */

  public function valid_date($str) {
      $CI = $this->CI =& get_instance(); // Get your CodeIgniter instance

      if (($str = strtotime($str)) === FALSE) { // Basic timestamp check
          // Set error message by calling the method through the CI instance.
          // Obviously must be done BEFORE returning any value
          $this->CI->form_validation->set_message('valid_date', '{field} must be a valid date.');
          return FALSE;
      }

      return TRUE;
    }
}