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 iconv 解决utf-8和gb2312编码转换问题
Apr 12 PHP
PHP源码之explode使用说明
Aug 05 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
Jun 06 PHP
PHP实现的多文件上传类及用法示例
May 06 PHP
理解php依赖注入和控制反转
May 11 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
PHP实现验证码校验功能
Nov 16 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
php获取url参数方法总结
2014/11/13 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
javascript第一课
2007/02/27 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
浅谈vue中慎用style的scoped属性
2017/11/28 Javascript
vue2.0自定义指令示例代码详解
2019/04/25 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
原生js实现商品筛选功能
2019/10/28 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
解决ant Design Search无法输入内容的问题
2020/10/29 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
Python实现批量把SVG格式转成png、pdf格式的代码分享
2014/08/21 Python
python中urllib模块用法实例详解
2014/11/19 Python
python散点图实例之随机漫步
2018/08/27 Python
python绘制评估优化算法性能的测试函数
2019/06/25 Python
用python打印1~20的整数实例讲解
2019/07/01 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
Python测试Kafka集群(pykafka)实例
2019/12/23 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
python生成word合同的实例方法
2021/01/12 Python
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
详解HTML5新增标签
2017/11/27 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
市场开发与营销专业求职信范文
2014/05/01 职场文书
材料采购员岗位职责
2015/04/03 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书