ThinkPHP3.1新特性之字段合法性检测详解


Posted in PHP onJune 19, 2014

ThinkPHP3.1版增加了表单提交的字段合法性检测,可以更好的保护数据的安全性。这一特性是3.1安全特性中的一个重要部分。

表单字段合法性检测需要使用create方法创建数据对象的时候才能生效,具体有两种方式:

一、属性定义

可以给模型配置insertFields 和 updateFields属性用于新增和编辑表单设置,使用create方法创建数据对象的时候,不在定义范围内的属性将直接丢弃,避免表单提交非法数据。

insertFields 和 updateFields属性的设置采用字符串(逗号分割多个字段)或者数组的方式,例如:

class UserModel extends Model{
  protected $insertFields = array('account','password','nickname','email');
  protected $updateFields = array('nickname','email');
 }

设置的字段应该是实际的数据表字段,而不受字段映射的影响。

在使用的时候,我们调用create方法的时候,会根据提交类型自动识别insertFields和updateFields属性:

D('User')->create();

使用create方法创建数据对象的时候,新增用户数据的时候,就会屏蔽'account','password','nickname','email' 之外的字段,编辑的时候就会屏蔽'nickname','email'之外的字段。

下面是采用字符串定义的方式,同样有效:

class UserModel extends Model{
  protected $insertFields = 'account,password,nickname,email';
  protected $updateFields = 'nickname,email';
 }

二、方法调用

如果不想定义insertFields和updateFields属性,或者希望可以动态调用,可以在调用create方法之前直接调用field方法,例如,实现和上面的例子同样的作用:

在新增用户数据的时候,使用:

$User = M('User');
$User->field('account,password,nickname,email')->create();
$User->add();

而在更新用户数据的时候,使用:

$User = M('User');
$User->field('nickname,email')->create();
$User->where($map)->save();

这里的字段也是实际的数据表字段。field方法也可以使用数组方式。

使用字段合法性检测后,你不再需要担心用户在提交表单的时候注入非法字段数据了。显然第二种方式更加灵活一些,根据需要选择吧!

PHP 相关文章推荐
最简单的PHP程序--记数器
Oct 09 PHP
基于mysql的论坛(2)
Oct 09 PHP
php实现的简单压缩英文字符串的代码
Apr 24 PHP
用php实现的获取网页中的图片并保存到本地的代码
Jan 05 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
CodeIgniter中实现泛域名解析
Jul 19 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
PHP中使用OpenSSL生成证书及加密解密
Feb 05 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
利用PHP计算有多少小于当前数字的数字方法示例
Aug 26 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 #PHP
ThinkPHP的Widget扩展实例
Jun 19 #PHP
ThinkPHP3.1的Widget新用法
Jun 19 #PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 #PHP
ThinkPHP3.1新特性之Action参数绑定
Jun 19 #PHP
ThinkPHP3.1新特性之多层MVC的支持
Jun 19 #PHP
php定界符
Jun 19 #PHP
You might like
PHP&MYSQL服务器配置说明
2006/10/09 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
一个简单的javascript类定义例子
2009/09/12 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
JavaScript函数内部属性和函数方法实例详解
2016/03/17 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
Vue.js实战之组件的进阶
2017/04/04 Javascript
微信小程序开发之麦克风动画 帧动画 放大 淡出
2017/04/18 Javascript
nodejs处理图片的中间件node-images详解
2017/05/08 NodeJs
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
详解element-ui中el-select的默认选择项问题
2019/08/02 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
几个常见的软件测试问题
2016/09/07 面试题
学习标兵获奖感言
2014/02/20 职场文书
经管应届生求职信范文
2014/05/18 职场文书
学校志愿者活动总结
2014/06/27 职场文书
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
会计试用期自我评价
2015/03/10 职场文书
聘任通知书
2015/09/21 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python