首页 后端开发 php教程 关于thinkPHP框架自动填充的原理及分析

关于thinkPHP框架自动填充的原理及分析

Jun 19, 2018 am 10:36 AM
thinkphp框架 自动填充

这篇文章主要介绍了thinkPHP框架自动填充,结合实例形式较为详细的分析了thinkPHP框架自动填充的原理、使用方法及相关操作注意事项,需要的朋友可以参考下

本文实例分析了thinkPHP框架自动填充原理与用法。分享给大家供大家参考,具体如下:

thinkphp有一个自动填充字段的方法

填充规则如下

1

2

3

4

5

array(

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

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

   ......

);

登录后复制

注:研究源码后发现其实还有第4个参数,是给函数或者回调方法传参数用的,参数1默认为该字段值,如:

1

array('mobile','trim',3,'function',参数2,参数3'),

登录后复制

验证支付动态和静态

静态验证

在模型类里面预先定义好该模型的自动验证规则,在使用create方法后会自动去验证。

以下是官方的例子

1.首先在模型中定义好验证的规则

1

2

3

4

5

6

7

8

9

10

namespace Home\Model;

use Think\Model;

class UserModel extends Model{

   protected $_auto = array (

     array('status','1'), // 新增的时候把status字段设置为1

     array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理

     array('name','getName',3,'callback'), // 对name字段在新增和编辑的时候回调getName方法

     array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳

   );

}

登录后复制

2.在调用的时候用create方法会自动进行填充

1

2

3

4

5

6

7

8

$User = D("User"); // 实例化User对象

if (!$User->create()){ // 创建数据对象

   // 如果创建失败 表示验证没有通过 输出错误提示信息

   exit($User->getError());

}else{

   // 验证通过 写入新增数据

   $User->add();

}

登录后复制

动态验证

以下是官方的例子

1

2

3

4

5

6

7

8

$rules = array (

  array('status','1'), // 新增的时候把status字段设置为1

  array('password','md5',3,'function') , // 对password字段在新增和编辑的时候使md5函数处理

  array('update_time','time',2,'function'), // 对update_time字段在更新的时候写入当前时间戳

);

$User = M('User');

$User->auto($rules)->create();

$User->add();

登录后复制

下面是核心的代码分析:

create方法调用后会调用autoOperation方法,方法如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

/**

 * 自动表单处理

 * @access public

 * @param array $data 创建数据

 * @param string $type 创建类型

 * @return mixed

 */

private function autoOperation(&$data,$type) {

  if(!empty($this->options['auto'])) {

    $_auto  $this->options['auto'];

    unset($this->options['auto']);

  }elseif(!empty($this->_auto)){

    $_auto  $this->_auto;

  }

  // 自动填充

  if(isset($_auto)) {

    foreach ($_auto as $auto){

      // 填充因子定义格式

      // array('field','填充内容','填充条件','附加规则',[额外参数])

      if(empty($auto[2])) $auto[2] = self::MODEL_INSERT; // 默认为新增的时候自动填充

      //这里的判断是关键,$type为当前的操作状态,值为1表示是插入,值为2表示是更新

      //如果当前的$type状态值等于设置的值$auto[2]或者$auto[2]的值为3,代表需要填充

      if( $type == $auto[2] || $auto[2] == self::MODEL_BOTH) {

        if(empty($auto[3])) $auto[3] = 'string';

        switch(trim($auto[3])) {

          case 'function':  // 使用函数进行填充 字段的值作为参数

          case 'callback': // 使用回调方法

            $args = isset($auto[4])?(array)$auto[4]:array();

            if(isset($data[$auto[0]])) {

              array_unshift($args,$data[$auto[0]]);

            }

            if('function'==$auto[3]) {

              $data[$auto[0]] = call_user_func_array($auto[1], $args);

            }else{

              $data[$auto[0]] = call_user_func_array(array(&$this,$auto[1]), $args);

            }

            break;

          case 'field':  // 用其它字段的值进行填充

            $data[$auto[0]] = $data[$auto[1]];

            break;

          case 'ignore': // 为空忽略

            if($auto[1]===$data[$auto[0]])

              unset($data[$auto[0]]);

            break;

          case 'string':

          default: // 默认作为字符串填充

            $data[$auto[0]] = $auto[1];

        }

        if(isset($data[$auto[0]]) && false === $data[$auto[0]] )  unset($data[$auto[0]]);

      }

    }

  }

  return $data;

}

登录后复制

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

关于smarty循环嵌套的用法

关于PHP编译configure时常见的错误

关于PHP中的静态变量及static静态变量的使用解析

以上是关于thinkPHP框架自动填充的原理及分析的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何处理PHP表单中的自动填充和自动完成 如何处理PHP表单中的自动填充和自动完成 Aug 11, 2023 pm 06:39 PM

如何处理PHP表单中的自动填充和自动完成随着互联网的发展,人们越来越依赖自动填充和自动完成功能来简化他们在网站上的操作。而在PHP表单中实现这些功能并不复杂,本文将简要介绍如何使用PHP来处理表单的自动填充和自动完成。在开始之前,我们需要明确什么是自动填充和自动完成。自动填充是指根据用户之前的输入或者历史记录,自动为用户填写表单中的字段。例如,在用户输入邮件

使用Java实现表单数据的自动填充与输入建议 使用Java实现表单数据的自动填充与输入建议 Aug 07, 2023 pm 07:05 PM

使用Java实现表单数据的自动填充与输入建议近年来,随着互联网的发展,表单数据填写已经成为我们日常生活中的一部分。然而,填写大量的表单数据往往会给用户带来一定的困扰,尤其是在输入重复的数据时。为了提高用户的填写效率和体验,我们可以利用Java语言来实现表单数据的自动填充与输入建议。本文将介绍如何使用Java来实现这一功能,并提供代码示例供参考。首先,我们需要

php如何使用ThinkPHP6框架? php如何使用ThinkPHP6框架? May 31, 2023 pm 03:01 PM

随着Web开发的不断发展,开发人员需要使用一些实用的工具和框架来节省时间和努力,同时提高应用程序的品质。ThinkPHP是一个流行的PHP框架,它可以极大地简化开发并提高效率。在本文中,我们将学习如何使用最新版本的ThinkPHP6框架。环境要求首先,您需要确认您的系统满足以下要求:PHP7.1版本及以上MySQL5.5版本及以上Composer是一个

PHP中的表单自动填充技巧 PHP中的表单自动填充技巧 May 24, 2023 am 09:31 AM

随着互联网的不断发展,表单已经成为了我们日常网站使用的功能之一。而让用户填写表单无疑是一项烦琐的任务,因此有必要使用一些技巧来简化这个过程。本文将介绍在PHP中实现表单自动填充的技巧。一、使用默认值当设置表单的默认值时,可以在表单标签中使用"value"属性来指定。以下是一个例子:

开发建议:如何利用ThinkPHP框架进行RBAC权限管理 开发建议:如何利用ThinkPHP框架进行RBAC权限管理 Nov 22, 2023 pm 08:02 PM

《利用ThinkPHP框架进行RBAC权限管理的开发建议》随着互联网的发展,越来越多的Web应用需要实现权限管理的功能,以保证系统的安全性和可控性。RBAC(Role-BasedAccessControl,基于角色的访问控制)作为一种成熟的权限管理模型,在实际开发中得到了广泛的应用。ThinkPHP作为一款流行的PHP框架,提供了丰富的功能和灵活的扩展机

开发建议:如何利用ThinkPHP框架进行微信开发 开发建议:如何利用ThinkPHP框架进行微信开发 Nov 22, 2023 pm 04:18 PM

在当今互联网时代,微信已经成为人们日常生活中不可或缺的一部分。无论是社交、支付、购物还是信息传递,微信都扮演着重要的角色。因此,利用ThinkPHP框架进行微信开发已经成为许多开发者的选择。ThinkPHP框架是一款国产的PHP开发框架,它具有开发效率高、扩展性强、文档完善等特点,适合用于微信公众号、小程序等开发。本文将从接入微信公众平台、消息处理、素材管理

如何解决火狐浏览器保存账号密码后无法自动填充问题 如何解决火狐浏览器保存账号密码后无法自动填充问题 Jan 29, 2024 pm 07:30 PM

火狐浏览器保存账号密码之后无法自动填充怎么办?我们选择了保存账号密码,但是无法自动填充怎么办?我们在使用火狐浏览器登录账号密码的时候,浏览器会提示我们是否要保存,我们选择了保存,但是下次在打开浏览器的时候,账号密码还是没有自动填充进去,这应该怎么解决,下面小编整理了火狐浏览器保存账号密码之后无法自动填充的解决办法,不会的话,跟着我往下看吧!火狐浏览器保存账号密码之后无法自动填充怎么办1、打开火狐浏览器,点击浏览器右上角的“打开菜单”图标,点击下方菜单列表中的“选项”,打开浏览器选项面板。2、在火

PHP开发商城,实现用户收货地址自动填充 PHP开发商城,实现用户收货地址自动填充 Jun 30, 2023 pm 10:24 PM

如何利用PHP开发商城实现用户收货地址自动填充功能标题:PHP商城开发指南:实现用户收货地址自动填充功能引言:随着电商行业的快速发展,用户体验对于商城的重要性越来越高。其中一个关键的用户体验因素是用户填写收货地址的过程。为了提高用户的效率和减少错误,我们可以利用PHP开发商城,在用户填写收货地址的过程中实现自动填充功能。本文将介绍如何使用PHP实现这一功能。

See all articles