/**
* 统一API参数检验方法
*
* 调用示例 check_param(array('money' => array('required', 'integer', 'greater_than_equal_to[1]', 'less_than_equal_to[200]')));
*
* @access public
* @param array $arr
* @since 1.0
* @return boolean
*/
public function check_param($arr, $data = array(), $method = 'get')
{
/**
* 设置要验证的请求数据
*/
if (!empty($arr)) {
$key_arr = array();
$rule_arr = array();
foreach ($arr as $key => $value) {
$temp_arr = explode(",", $key);
if (!is_array($value)) {
$value = explode("|", $value);
}
$key_arr = array_merge($key_arr, $temp_arr);
if (!empty($temp_arr)) {
foreach ($temp_arr as $temp_value) {
if (!empty($rule_arr[$temp_value])) {
$rule_arr[$temp_value] = array_merge($rule_arr[$temp_value], $value);
} else {
$rule_arr[$temp_value] = $value;
}
}
}
}
$key_arr = array_unique($key_arr);
if (!empty($rule_arr)) {
foreach ($rule_arr as $rule_key => $rule_value) {
$rule_arr[$rule_key] = array_unique($rule_value);
}
}
}
if ($method === 'post' || $method === 'POST') {
$request_data = $this->input->post($key_arr, TRUE);
} else {
$request_data = $this->input->get($key_arr, TRUE);
} if ('get_post' == $method) {
$request_data = [];
foreach ($key_arr as $one_key) {
$request_data[$one_key] = $this->input->get_post($one_key, TRUE);
}
} $raw_input_stream = $this->input->raw_input_stream;
// $raw_input_stream = stripslashes($raw_input_stream); $input_stream = json_decode($raw_input_stream, TRUE);
if (json_last_error() === JSON_ERROR_NONE) {
foreach ($key_arr as $one_key) {
if (NULL === $request_data[$one_key] and isset($input_stream[$one_key])) {
$request_data[$one_key] = $input_stream[$one_key];
}
}
}
$this->form_validation->set_data($request_data);
/**
* 设置验证规则
*/
if (!empty($rule_arr)) {
$lang = $this->lang->line('txt_base_validation');
foreach ($rule_arr as $rule_key => $rule_value) {
$ts = $this->form_validation->set_rules($rule_key, '', $rule_value, array('required' => $lang[0]
, 'integer' => $lang[1]
, 'regex_match' => $lang[2]
, 'greater_than' => $lang[3]
, 'max_length' => $lang[4]
, 'min_length' => $lang[5]
));
}
}
/**
* 开始验证
*/
if (!$this->form_validation->run()) {
//验证失败处理逻辑
$errmsg = validation_errors(' ', ' ');
if (!empty($arr) && !empty($data)) {
foreach ($arr as $arr_key => $arr_value) {
$errmsg = str_replace($arr_key, $data[$arr_key], $errmsg);
}
}
$this->returnError($errmsg . $this->lang->line('txt_base_error_msg'), '400');
return FALSE;
}
return $request_data;
}

CI框架, 参数验证的更多相关文章

  1. SpringBoot-服务端参数验证-JSR-303验证框架

    1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用. 比如: @RestController @RequestMapping("/h ...

  2. CI框架自带的验证工具及汉化

    本人自己还是很喜欢CI框架自带的验证工具的,使用方式如下: /** *@blog<http://www.phpddt.com> */ public function do_login() ...

  3. 初学后台框架总结篇二——快速了解CI框架

    一.下载CI框架并安装,这里放置一张自己的项目目录结构图 目录框架搭建好之后开始将自己的项目与框架融合 二.更改相关配置 1.用任何文本编辑器打开 application/config/config. ...

  4. CI框架源码阅读笔记4 引导文件CodeIgniter.php

    到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...

  5. CI框架源码阅读笔记2 一切的入口 index.php

    上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...

  6. CI框架笔记

    @update 2016-4-2 13:45:35 一.目录结构 ci_demo ├─myapp 应用主目录 │ ├─autoload.php 自定义的自动加载文件(可选) │ ├─myapp.php ...

  7. 各种demo——CI框架学习

    各种demo——CI框架学习   寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...

  8. 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的

    [军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的   之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...

  9. CI框架 QQ接口(第三方登录接口PHP版)

    本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行.本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了.10分钟不要,接口就可完成.第一步 ...

  10. CI框架浅析(全篇)

        业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很轻便的框架,整个下载包 ...

随机推荐

  1. 《C++ Primer(第五版)》知识巩固

    运行平台:ubuntu 12.04/GCC 4.8.0 第二章:基本内置类型 1.decltype类型指示符 当我们从表达式的类型来推断要定义的类型时,可以使用decltype()来解析:declty ...

  2. 为什么要实现Serializable

    工作中我们经常在进行持久化操作和返回数据时都会使用到javabean来统一封装参数,方便操作,一般我们也都会实现Serializable接口,那么问题来了,首先:为什么要进行序列化:其次:每个实体be ...

  3. MySQL对结果进行排序order by

    order by {col_name | expr | position} [ASC | DESC] 查询结果     排序条件的顺序  决定   排序条件   的优先级 如果同一条件下值相等,那么启 ...

  4. html中使用滚动条

    1. 在html页面中使用滚动条,效果如下: 代码如下: <div style="height:auto !important;max-height:200px;overflow:sc ...

  5. JS字符串与二进制的转化

    JS字符串与二进制的相互转化 1 2 3 4 5 //字符串转ascii码,用charCodeAt(); //ascii码转字符串,用fromCharCode(); var str = "A ...

  6. 系统对象的使用——Cookie,ViewState,Session,Application

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  7. golang学习之beego增删改查代码实现

    记录下使用beego的增删改查实现,数据库使用mysql,完整代码如下: package main import ( _ "crud_beego/routers" //自动注册路由 ...

  8. Java生成验证码(二)

    前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ————————————————————————————————————————————   ...

  9. 《MySQL 基础课程》笔记整理(基础篇)

    一.尝试MySQL 1.打开MySQL # 启动MySQL服务 sudo service mysql start # 使用 root 用户登录,这里密码为空,直接回车登录 mysql -u root ...

  10. Django 常用字段和参数

    一.ORM字段 类型 说明 AutoField 一个自动增加的整数类型字段.通常你不需要自己编写它,Django会自动帮你添加字段:`id = models.AutoField(primary_key ...