CodeIgniter表单验证类支持逆规则假值验证规则方法
今天Kaijia使用CI框架写代码时遇到一个表单验证的问题,Kaijia要写一个修改密码功能,有一个旧密码和新密码,需要新旧密码不相同,于是使用了数据验证类。这个类可以帮你预处理和检查提交的数据,其中提供了matches原生规则,此规则在表单元素的值与参数中对应的表单字段的值不相等情况下返回FALSE。但Kaijia需要实现的条件是两个值不相等,于是只有自己写回调代码。
考虑到如果存在很多原生规则都没有逆规则,于是打算写一个类似于“!matches”这样的功能一劳永逸实现所有的规则都可以直接判假。Kaijia花了一点时间,写出了一个这个类扩展。
首先在CI根目录/application/libraries文件夹下建立文件MY_Form_validation.php文件,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /** * Form Validation Class * * @package CodeIgniter * @subpackage Libraries * @category Validation */ class MY_Form_validation extends CI_Form_validation { function __construct() { parent::__construct(); } /** * 不符合指定条件 */ public function not($str, $field) { $param = explode('.', $field, 2); if(count($param) == 1) return !$this->{$param[0]}($str); return !$this->{$param[0]}($str, $param[1]); } } /* End of file MY_Form_validation.php */ /* Location: ./application/libraries/MY_Form_validation.php */ |
这个扩展向表单验证类增加了not验证规则,用来验证不符合指定验证规则的情况,调用方法是将原规则放入赋值的第一位,例如验证新旧密码相同时使用如下代码的话:
1 |
$this->form_validation->set_rules('new_password', '新密码', 'matches[old_password]'); |
要验证新旧密码不同时就改成了:
1 |
$this->form_validation->set_rules('new_password', '新密码', 'not[matches.old_password]'); |
设置同时不要忘了设置错误提示消息哦,例如:
1 |
$this->form_validation->set_message('not', '新密码不能与旧密码相同。'); |
这样加载后表单验证灵活性能大幅提升,功能强大了。
评论