用户
 找回密码
 入住 CI 中国社区

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 751|回复: 3
收起左侧

[高级] 关于CI自定义表单验证

[复制链接]
发表于 2017-3-20 10:13:39 | 显示全部楼层 |阅读模式
本帖最后由 Martix 于 2017-3-20 15:40 编辑

    CI的表单验证还是很舒服的一个验证机制,最近在做一个小的博客吧,所以就用到了这个,感觉很不错就发上来给大家看看,    首先是配置的验证数组到一个单独的文件中,叫做 form_validation.php,放到config文件中,这样控制器代码就可以如下引用:

    QQ截图20170320095738.jpg



PHP复制代码
 
//接收POST参数
$this->load->library('form_validation');
if ($this->form_validation->run('customer/add') == FALSE)
{
      exit(json_encode(array('status'=>false,'tips'=>validation_one_errors())));
}
 
复制代码

validation_one_errors()是我自定义的一个函数,返回错误信息中的第一个错误信息,而不是CI自带的那个validation_errors() 返回所有的错误信息了,这样ajax返回数据就方便了.
    然后图上那个is_chinese 是我自定义的方法放在了 helpers 文件夹中的一个文件(func_helper.php)
PHP复制代码
 
if(!function_exists('is_chinese'))
{
/**
* 是否为中文
 * @param string $str
 * @return boolean
 */
 
        function is_chinese($str){  
                if(preg_match('/^[\x{4e00}-\x{9fa5}]+$/u',$str))  
                        return true;  
                else  
                        return false;  
        }
}
 
复制代码

可以选择手动加载,或者是自动加载,自动加载就在 config 文件夹下的 autoload.php 文件中 修改 $autoload['helper'] = array('func')这个键值,
    最后就是在错误信息中配置错误信息了.这里我引入的是中文包 所以就在 application\language\chinese\form_validation_lang.php  添加错误信息即可如下:
PHP复制代码
 
$lang['form_validation_is_chinese']                        = '{field} 请输入汉字.';
 
复制代码

    PS:感谢hex,本来准备改form_validation 中 run 的方法,后来放弃了.
     获取第一个错误信息 我写在了系统 system\helpers\form_helper.php 中,在856左右能看到 validation_errors() 获取所有错误信息的函数
PHP复制代码
 
if ( ! function_exists('validation_one_errors'))
{
        /**
         * Validation Error first error
         * 获取验证函数的 第一个验证错误
         *
         * @param        string
         * @param        string
         * @return        string
         */

        function validation_one_errors()
        {
                if (FALSE === ($OBJ =& _get_validation_object()))
                {
                        return '';
                }
                $error_array = $OBJ->error_array();
                if(!empty($error_array)){
                        return current($error_array); //返回第一个错误
                }
                return '';
        }
}
 
 
复制代码


评分

参与人数 2威望 +7 收起 理由
Hex + 5 赞一个!
Closer + 2 赞一个!

查看全部评分

发表于 2017-3-20 18:17:56 | 显示全部楼层
这是个好帖子!~!
 楼主| 发表于 2017-3-21 16:47:29 | 显示全部楼层
Hex 发表于 2017-3-20 18:17
这是个好帖子!~!

你评论底下那个 名片 怎么设置的?
发表于 2017-3-21 19:44:30 | 显示全部楼层
Martix 发表于 2017-3-21 16:47
你评论底下那个 名片 怎么设置的?

微博可以生成 ubb 代码,你可以去微博看看,参考 http://app.weibo.com/tool/signature

本版积分规则