CI框架, 参数验证
/**
* 统一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框架, 参数验证的更多相关文章
- SpringBoot-服务端参数验证-JSR-303验证框架
1. springboot 默认集成了 hibernate-validator,它默认是生效的,可以直接使用. 比如: @RestController @RequestMapping("/h ...
- CI框架自带的验证工具及汉化
本人自己还是很喜欢CI框架自带的验证工具的,使用方式如下: /** *@blog<http://www.phpddt.com> */ public function do_login() ...
- 初学后台框架总结篇二——快速了解CI框架
一.下载CI框架并安装,这里放置一张自己的项目目录结构图 目录框架搭建好之后开始将自己的项目与框架融合 二.更改相关配置 1.用任何文本编辑器打开 application/config/config. ...
- CI框架源码阅读笔记4 引导文件CodeIgniter.php
到了这里,终于进入CI框架的核心了.既然是“引导”文件,那么就是对用户的请求.参数等做相应的导向,让用户请求和数据流按照正确的线路各就各位.例如,用户的请求url: http://you.host.c ...
- CI框架源码阅读笔记2 一切的入口 index.php
上一节(CI框架源码阅读笔记1 - 环境准备.基本术语和框架流程)中,我们提到了CI框架的基本流程,这里再次贴出流程图,以备参考: 作为CI框架的入口文件,源码阅读,自然由此开始.在源码阅读的过程中, ...
- CI框架笔记
@update 2016-4-2 13:45:35 一.目录结构 ci_demo ├─myapp 应用主目录 │ ├─autoload.php 自定义的自动加载文件(可选) │ ├─myapp.php ...
- 各种demo——CI框架学习
各种demo——CI框架学习 寒假学习一下CI框架,请各位多多指教! 一.CI的HelloWorld! 注意:CI禁止直接通过文件目录来访问控制器. ./application/controlle ...
- 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的
[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...
- CI框架 QQ接口(第三方登录接口PHP版)
本帖内容较多,大部分都是源码,要修改的地方只有一个,其他只要复制过去,就可以完美运行.本帖主要针对CI框架,不用下载SDK,按我下面的步骤,建文件,复制代码就可以了.10分钟不要,接口就可完成.第一步 ...
- CI框架浅析(全篇)
业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很轻便的框架,整个下载包 ...
随机推荐
- Failed to start NodeManager caused by "/var/lib/hadoop-yarn/yarn-nm-recovery/yarn-nm-state/LOCK: Permission denied"
Hadoop 安装步骤: 0. 安装前准备(节点机器,环境设置,yum源设置) 1. 配置并安装Cloudera-Manager 2. 启动 CM 服务 3. 安装CDH,并配置集群 4. 启动 ...
- JS框架设计之主流框架的引入机制DomeReady一种子模块
DomReady其实是一种名为"DomContentLoaded"事件的名称,不过由于框架的需要,它与真正的DomContentLoaded有区别,在旧的JS书籍中m都会让我们把J ...
- hadoop集群搭建过程中遇到的问题
在安装配置Hadoop集群的过程中遇到了很多问题,有些是配置导致的,有些是linux系统本身的问题造成的,现在总结如下. 1. hdfs namenode -format出现错误:hdfs namen ...
- weblogic JDBC Connection Pools--转官方文档
http://docs.oracle.com/cd/E13222_01/wls/docs81/ConsoleHelp/jdbc_connection_pools.html#1106016 JDBC C ...
- Java入门系列-26-JDBC
认识 JDBC JDBC (Java DataBase Connectivity) 是 Java 数据库连接技术的简称,用于连接常用数据库. Sun 公司提供了 JDBC API ,供程序员调用接口和 ...
- Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)
Silverlight中的动画(Animation)与视图状态管理(Visual State Manager) 结合使用是非常常见的,动画用于管理对象在某段事件段内执行的动画动作,视图状态管理则用于控 ...
- 在 Azure 虚拟机上快速搭建 MongoDB 集群
MongoDB 是目前在 NoSQL 市场上非常受欢迎的一个数据库,本文介绍如何使用 Azure PowerShell 和 Azure CLI 在 Azure 虚拟机上搭建单节点 MongoDB(测试 ...
- document文档流详解
html页面下载完默认会打开一个文档流document对象(调用document.open,此时浏览器标题左边会显示加载中图标),开始从上往下渲染内容,渲染完成调用document.close关闭渲染 ...
- [javaEE] 开源数据库连接池
一些开源组织提供了数据源的独立实现: DBCP数据库连接池 C3P0数据库连接池 Apache Tomcat内置的连接池 DBCP连接池 apache提供的连接池实现,需要导入common-dbcp. ...
- jdk各版本
1.jdk1.7: 1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头: 1.2 Switch语句支持string类型: 2.jdk1.8: