Forms Codeigniter中表单验证的扩展
我已经将这个名为“My_Form_validation.php”的类文件放在了“application/core”中,并且还尝试将它放在了“application/libraries”中 在我的控制器中,我正在使用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中的内容
$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;
}
}