thinkphp3.2.3之自动完成的实现

有时候,我们希望系统能够帮我们自动完成一些功能,比如自动为密码加密,忽略空等,这个时候我们就需要利用到自动完成(填写)的功能。

ThinkPHP 模型层提供的数据处理方法,主要用于数据的自动处理和过滤,使用 create()方法创建数据是会自动完成。自动完成一般通过默认字段写入、安全字段过滤以及业务逻辑的

自动处理等。有两种方式实现自动完成的规则:1.静态方式:在模型类里通过$_auto 属性定义处理规则;2 动态方式:使用模型类的 auto 方法动态创建自动处理规则。

一.完成规则

array(

  array(完成字段1,完成规则1,[完成规则1,完成条件1]),

  array(完成字段2,完成规则2,[完成规则2,完成条件2]),

完成条件:可选,具体如下:
1.self::MODEL_INSERT 或 1,新增数据的时候处理(默认) ;
2.self::MODEL_UPDATE 或 2,更新数据的时候处理;
3.self::MODEL_BOTH 或 3,所有情况均处理。
附加规则:可选,配合完成规则使用,包括一下规则:
规则 说明
  function 函数完成,定义的验证规则是一个函数名
  callback 方法完成,定义的验证规则是当前模型类的一个方法
  field 用其他字段填充,表示填充的内容是一个其他字段的值
  string 字符串(默认)
  ignore 为空则忽略
二.静态方式

在Common/UserModel下:

class UserModel extends Model{
    protected $_auto = array (
        // 新增的时候把status字段设置为1
        array(‘status‘,‘1‘),
        // 对password字段在所有情况下使用md5函数处理
        array(‘password‘,‘md5‘,3,‘function‘),
        // 对username字段在新增时回调getName方法
        array(‘username‘,‘getName‘,1,‘callback‘),
        // 对regdate字段在新增时写入当前时间戳
        array(‘regdate‘,‘time‘,1,‘function‘),
	// 对regip字段在新增时写入用户注册IP地址
        array(‘regip‘,‘get_client_ip‘,1,‘function‘),
    );
}

对Home/Controller/UserController.class.php起约束

三.动态方式

  直接书写在Home/Controller/UserController.class.php,即动态完成就是把完成的规则放在控制器端,这样,在操作的时候比较灵活,缺点就是比
较混乱。
 //动态完成
$rules = array(
array(‘user‘, ‘sha1‘, 3, ‘function‘),//完成对user字段的加密
);
$user = M(‘User‘);
$data[‘user‘] = ‘蜡笔小新‘;
if ($user->auto($rules)->create($data)) {
$user->add();
}

时间: 2024-12-27 08:28:35

thinkphp3.2.3之自动完成的实现的相关文章

Thinkphp3.2数据库字段自动转小写,字段大小写自动转换

最简单的办法就是在配置文件加上 'DB_PARAMS' => [\PDO::ATTR_CASE => \PDO::CASE_NATURAL], 但是如果项目已经上线了一段直接, 这样可能会影响其他人写的 然后我想在控制器里面动态改变DB_PARAMS这个配置,后来发现不行. 因为基类里面有数据库操作,model是单例的.不会重新new对象. 最后我想到了一个办法,重新声明一个函数,就是为了让他重新new一个model function db($table=''){ $config = [ 'd

thinkphp3.2.2版本,公共函数放哪里才能自动加载?

在原来的项目里面有个common/common.php, 里面放的就是些function,之前能在任何地方直接使用, 现在报错不能使用, 公用函数库文件放置在Application应用模块根目录下的Common模块下的Common目录下即可(./Application/Common/Common/function.php),其他模块直接调用该公用函数文件的函数,命名空间都不需要 thinkphp3.2.2版本,公共函数放哪里才能自动加载?,布布扣,bubuko.com

ThinkPHP3.2.3中三大自动中的缺陷问题

我们在使用Thinkphp3.2.3框架时在对数据表进行模型化后就可以使用自动完成功能. 自动完成可以帮助我们更简便的完成对表单内容对数据表(集合)的填充,自动完成是基于: 当实例化数据库user后,会自动的将表单的信息安装数据表的对应属性值字段填充进去, 如果有多余的字段的话将会自动过滤.正常的使用MySQL数据库的话就不会存在问题. 但是使用NoSQL数据库就会存在缺陷了,如MongoDB数据库本身就是依靠文档存储数据 的没有固定的表结构.在使用自动完成时就会将表单的所有字段都填充进去,这样

表单 对数据库字段自动加密解密表单提交(THINKPHP3.2)

1.config配置变量 'MODEL_FIELD_FLAG' => TRUE,//表单加密开关 'MODEL_FIELD_NAME_PRE' => 'mlm_',//表单加密前缀 'MODEL_FIELD_EMCODE' => 'md5',//加密方式 'MODEL_FIELD_EMCODE_KEY' => '[email protected]'//加密key 2.控制器层 $model  继承基础类 BaseModel BaseRelationModel 任意一个的自定义模型

2016/05/15 ThinkPHP3.2.2 表单自动验证实例 验证规则的数组 直接写在相应的控制器里

使用TP 3.2框架 验证规则也可以写到模型里,但感觉有些麻烦, 一是有时候不同页面验证的方式会不一样, 二是看到这个   Add  事件里的代码,就清楚要接收什么数据,如何验证数据能够在第一眼有个大致了解 ①控制器代码页 1 <?php 2 namespace Home\Controller; 3 use Think\Controller; 4 5 header("Content-type: text/html; charset=utf-8"); 6 7 class AddCo

thinkphp3.2自动生成模块BIND_MODULE

thinphp3.2中提供了自定义生成模块与控制器的常量,分别是BIND_MODULE,BUILD_CONTROLLER_LIST 在 index.php 文件中定义 BIND_MODULE,BUILD_CONTROLLER_LIST 常量 1 2 3 4 5 6 7 8 9 10 11 // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG',True); // 定义应用目录 define('APP_PATH','./App/'); // 自动

thinkphp3.2如何自动生成后台模块并且怎么访问

https://blog.csdn.net/whulovely/article/details/72773729 步骤一:在入口文件index.php下绑定Admin模块(这时候别再Home同级手动创建Admin)具体操作:define('BIND_MODULE','Admin'); ,然后访问入口文件,自动生成Admin文件夹:步骤二:注释掉刚才的绑定操作[//define('BIND_MODULE','Admin');]:Home和Admin就都可以访问了,访问方法:入口文件.php/Adm

thinkphp3.2.3 自动验证 正则验证

<?php namespace Home1\Model; use Think\Model; class ShopYuyueInfoModel extends Model { // protected $_validate = array( protected $_validate = array( array('name','require','姓名必填..1!'), // 必填 array('tel','/^1[34578]\d{9}$/','手机号码不对..1!',0,'regex',3),

(一)熟悉执行流程——基于ThinkPHP3.2的内容管理框架OneThink学习

ThinkPHP作为国内具有代表性的PHP框架,经过多年的发展,受到越来越多公司与开发者的青睐.我也在忙里偷闲中抽出部分时间,来学习这个优秀的框架.在开始学习这个框架时,最好通过实例来学习,更容易结合实际的生产情况,促进学习的效果:这里我就选择由ThinkPHP团队开发的基于ThinkPHP3.2的内容管理框架OneThink来学习,从了解它的执行流程→熟悉流程中各个细节→了解模版标签→自己实际去使用标签→再了解它的实际执行过程……通过这样一个流程来熟悉如何基于ThinkPHP开发出一套CMS系