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是一个很轻便的框架,整个下载包 ...
随机推荐
- unity3d vscode
原来unity3d里assets store有一个插件,下载就行了,插件名就叫vscode 下载完了之后,preference里就会出现,vscode,Enable Integration 这一项勾上 ...
- MYSQL分表与分区
什么是分表分区分表分区的区别实现方式上数据处理上提高性能上实现的难易度上mysql分表和分区的联系如何分区概述分区技术支持分区类型及举例注意应用场景示例订单表比预想中扩张速度快坑爹的日志表每半月一个分 ...
- SuperMap iClient for JavaScript 之关联查询
人们常说,计划赶不上变化.同样的,在项目中,使用的数据也是在不断变化的,尤其是属性信息的改变.就比如说,地图上的地物,它的空间信息在比较长的时间内,都不会发生变化,他的属性信息在初期不完整或者与后来的 ...
- Jquery中和ajax有关的方法
Jquery关于ajax有一系列的方法函数,单单知道$.ajax()显然是不够的,接下来我们对该系列的方法函数逐一研究下. ajaxComplete(callback).ajaxError(callb ...
- (转载).NET的五层架构
我们刚开始学习架构的时候,首先会想到分层的概念,分层架构比较经典的是三层架构,那么,什么是三层架构呢?它包括表现层,业务层,数据访问层:而对于一个新手来说,从抽象意义上的三层架构,逻辑上就划分为三个层 ...
- c#单例(Singleton)模式实现
sealed class Singleton { private Singleton(); public static readonly Singleton Instance=new Singleto ...
- java类与对象基础--抽象类和接口
在java的类体系中,有两个比较特殊的抽象体--抽象类和接口.抽象体并不可以拥有具体的对象(而且接口甚至不是类),但是它们却是在java设计领域非常重要的两个概念,很多优秀的设计模式都是基于这两个概念 ...
- 多个tomcat配置
在centos7.3下搭建jenkins自动部署环境,需要一个tomcat来启动jenkins,另一个用来自动部署的位置,因此需要两个tomcat同时运行,并且在自动构建后能够启动项目,又不会关闭je ...
- 基于easyUI实现系统日志管理
此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. log.jsp:系统日志管理界面 <!DOCTYPE html PUBLIC "-//W ...
- jQuery数据缓存$.data 的使用以及源码解析
一.实现原理: 对于DOM元素,通过分配一个唯一的关联id把DOM元素和该DOM元素的数据缓存对象关联起来,关联id被附加到以jQuery.expando的值命名的属性上,数据存储在全局缓存对象jQu ...