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是一个很轻便的框架,整个下载包 ...
随机推荐
- Java框架-mybatis03使用注解实现mybatis
1.面向接口编程: 好处:扩展性好,分层开发中,上层不用管具体的实现,都遵循共同的标准,使得开发变得容易.规范性更好 2.注解的实现 a)编写Dao接口 public interface UserDa ...
- jQuery 学习笔记(TryjQuery)
第一集.页面加载完成后执行 js 代码: $(document).ready(function(){ $("h1").text("Where to?"); }) ...
- 【随笔】Linux主机简单判断CC攻击的命令
今天看到一个很有意思的命令tcpdump,在这里记录下. 如果想要看tcpdump的详细用法,可以点击这里. 什么是CC攻击? 关于CC攻击,这里引用百度的解释: CC攻击的原理就是攻击者控制某些主机 ...
- 浏览器对document.all的支持差异
从何而来从IE4开始IE的object model才增加了document.all对象,MSDN中也对 Object.all 有详细的说明,Object.all是个HTMLCollection,不是数 ...
- ACS蚁群算法求解对称TSP旅行商问题的JavaScript实现
本来以为在了解蚁群算法的基础上实现这道奇怪的算法题并不难,结果实际上大相径庭啊.做了近三天时间,才改成现在这能勉强拿的出手的模样.由于公式都是图片,暂且以截图代替那部分内容吧,mark一记. 1 蚁群 ...
- 启停无线网卡bat脚本
@echo off color 2 title 启停无线网卡 echo 启动无线网卡=======>按1键 echo 关闭无线网卡=======>按2键 set /p n= if /i & ...
- [转]NLog 自定义字段 写入 oracle
本文转自:http://www.cnblogs.com/skyapplezhao/p/5690695.html 1.通过Nuget安装NLog 下载,简单入门 请参照 我刚才转的几篇文章,下面我直接贴 ...
- HTML <a>标签的使用
<a></a>标签称作链接标记,由<a>与</a>所围的文字.图片等可以作为一个链接 Eg:<a href="index.html&qu ...
- java 线程池(1)
问题 : 线程池中的 coreSize 和 maxSize 的作用分别是什么? 未执行的线程池存在在哪种数据类型,为什么使用这种类型的数据结构 ThreadPoolExecutor概述 ThreadP ...
- Maven --- <distributionManagement>标签
1.<distributionManagement>的作用: 负责管理构件的发布.这是一个环境变量 <downloadUrl> URL </downloadUrl& ...