20150317--TP

1、 表名操作

在一个数据库中,如果部署了多个项目,那么我们可以使用表前缀解决问题

‘DB_PREFIX' =>‘think_’

tp中默认的表前缀是think_

如:数据库表名

我们接下来需要在配置文件config.php中,添加以下选项:

项目就可以正常工作。

tableName:

如:数据表名是sp_categorys,但是这个表对应的模型是 CategoryModel,那么,我不想改动文件名和类的前提下,还想使用这个模型。

trueTableName:

如:所有数据表的表前缀是sp,但某个表没有表前缀,如表名:goods,而不是sp_goods。

在子类模型中,添加trueTableName属性,表示是数据库的真实表名

2、 事务处理

在tp中,模型对象使用以下三个方法实现事务处理:

l $User->startTrans() :开启事务

l $User->commit()  :提交事务

l $User->rollback()  :回滚事务

什么情况下使用事务:

要么都成功,要么都失败

程序有一个文件,里面保存上百个人员的信息,我们需要使用php程序对文件中的人员信息入库。

3、 ActiveRecord

简称:AR模式

AR模式的核心:

1) 将数据表映射到类

2) 将字段映射到类属性

3) 将数据映射到类对象

class  Goods{

private $id;

private $name;

private $content;

public function __set($name,$value){

$this->$name=$value;

}

public function __get($name){

return $this->$name;

}

public function insert(){

$sql=”insert into goods values(null,‘$this->name’,’$this->content’)”;

}

public function fetch($id){

$sql=”select * from goods where id=’$id’”;

$row=$db->query($sql);

$this->id=$row[‘id’];

$this->name=$row[‘name’];

}

}

$goods=new Goods();

$goods->name=’’;

$goods->content=’’;

$goods->insert();

--------------------------------------------------------------------

$goods=new Goods();

$goods->id=8;

$goods->delete();

$goods=new Goods();

$goods->fetch(8);

echo $goods->name;

TP中AR模式

1) 增加数据

l $User = M("User");

l $User->name = 'ThinkPHP';

l $User->email = 'ThinkPHP@gmail.com';

l $User->add();

2) 修改数据

l $User->find(1);

l $User->name = 'TOPThink';

l $User->save();

3) 删除数据

l $User->delete(8);

4) 查询数据

l $User = M("User");

l $User->find(8);

l echo $User->name;

l echo $User->email;

TP中AR模式的原理:

我们可以看到,在这几个操作时,直接对对象的属性赋值,如:$category->name=’abc’,但$category对象下并没有这些属性。原因:魔术方法。

下面,我们一起看一下父类Model中的魔术方法:

可以看出,当我们为某个对象的属性进行赋值时,会自动执行__set方法,这个方法将这个传递过来的属性名保存在当前对象的data属性数组中,并赋值

当对对象取值,会自动执行__get方法,首先判断当前对象data属性数组中是否有这个元素,如果有,返回它的值,否则返回null,

综上所述:

我们为对象赋值的属性和值都是存储在当前对象$data属性中.

add方法举例:

可以看出,如果我们之前调用add方法时没有传递参数data,会首先判断data是否为空,如果为空,再判断当前对象下data属性是否不为空,如果不为空,将$this->data属性数组中的值赋值给参数data.

4、 联贯操作

l where

l order

l limit

l field

l group

语法:

$对象->方法1()->方法2()->方法n()->select();

以上方法在使用时没有顺序上的要求

但是最后的方法必须是select();

5、 统计查询

l count :查询数据总行数

l max :取最大值

l min :取最小值

l avg :平均值

l sum :求和

以上方法与select或find方法平级的方法

一、 实用项

1、 设置trace信息

1) 开启调试模式

2) 开启跟踪信息机制

config.php配置文件

2、 session和cookie

在tp中,它又封装了一些方法用于操作session和cookie

1) session相关方法

l session('name','value');  :添加一个新的session,并赋值

l $value = session('name');  :获取指定的session的值

l session('name',null); :删除指定的session的值

l session(null); :清空所有session的值

l session('?name'); :判断指定的session是否存在

在tp中,session机制默认是开启的,可以通过更改配置文件来控制

2) cookie的相关方法

l cookie('name','value');  :添加一个新的cookie并赋值

l cookie('name','value',3600); :添加一个新的cookie并赋值,同时指定有效期

l $value = cookie('name'); :获取指定cookie的值

l cookie('name',null); :删除指定cookie的值

session案例:

项目登录案例:

在项目中添加公共控制器CommonAction,用于验证session登录,以后,所有需要验证的模块的控制器都继承这个公共控制器。

3、 文件载入

1) 函数文件

(1)common.php

Common/common.php

文件位置:

文件内容:

引用函数:

如果关闭调试模式,我们发现,在common.php文件中定义的函数会被写入到runtime.php文件中。下次执行时,会直接从runtime.php文件中查找并执行,也就是说,如果函数文件common.php发生改变,用户不会看到最新结果。

(2)config.php

LOAD_EXT_FILE=“user”

文件位置:

文件内容:

配置文件:

我们在Common目录下创建其它函数文件,在程序中,如果直接使用,发现调用了未定义函数,说明Common目录下的文件,除了common.php之外,都不会被自动加载。我们可这样做,修改配置文件,添加配置选项:LOAD_EXT_FILE=’引用文件的列表’,这样就可以程序中直接使用函数了,同时,我们可以看出,使用这个方法加载的函数不会被写入到runtime.php文件中,所以函数的内容发生改变后,用户可以立即看到最新结果。

(3)load(‘@.user’);

Common/user.php

文件位置:

程序:

这种方式的好处在于,需要使用什么样的文件,就去载入哪个文件,而不需要每次载入多余的文件。

2) 类文件

(1)import(‘ORG.Util.User’);

ORG/Util/User.class.php

文件位置:

控制器:

运行:

(2) import(‘@.Common.User’);

Lib/Common/User.class.php

文件位置:

控制器:

总结:

将自定义类文件放在tp框架中,使用:

import(‘ORG.Util.User’);

将自定义类文件放在项目中,使用:

import (‘@.Common.User’);

4、 验证码

在tp框架程序中,有一个文件,如下图所示,Image.class.php,可以帮助我们实现验证码的输出功能

Image类的使用方式:

(1) 在用户控制器UserAction中添加一个动作用于显示验证码:

(2) 修改模板中的验证码图片加载路径,让路径指向控制器中的方法

(3) 运行程序,并输入验证码

(4)对用户输入的验证码进行校验,注意,Image类在保存session验证码时使用了md5加密,所以用户输入的验证码在判断时,也需要使用md5加密,再进行比较

同时,Image类也提供了方法可以输出中文验证码

(1) 先将simhei.ttf字体库文件从fonts文件夹复制到与Image类同级目录下

(2) 创建控制器动作,用于显示中文验证码

(3) 显示与验证,与上题相同

5、 数据分页

1) 在tp中,有一个类:Page.class.php,可以实现数据分页功能

2)具体步骤

l $User = D(“User”);

l $count = $User->count();

l $page = new Page($count,25);

l $show = $Page->show();

l $list = $User->limit($Page->firstRow.',.$Page->listRows)->select();

l $this->assign('list',$list);

l $this->assign('page',$show);

l $this->display();

代码:

模板:

运行:

3) 可以通过分页对象的setConfig方法改变分页样式

l setConfig

l header

l prev

l next

l first

l last

在setConfig方法中,可以直接修改分页对象的config属性数组

我们可以在分页对象调用show方法之前,通过setConfig修改文字样式

运行:

posted on 2016-05-08 21:13 山山未迟 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lifushan/p/5471607.html

20150317--TP相关推荐

  1. 和tp数据库_CAN / CAN FD传输层(TP)详解

    本文分享CAN / CAN FD在TP层传输规则详解,因为是从个人角度解读协议,有不精准之处,希望指出. CAN/CAN FD总线TP层映射到OSI计算机七层模型是在第三层和第四层: 对应CAN Fr ...

  2. TP框架中field查询字段

    TP框架中field查询字段 不是fields 也不是files !!!! 不是fields 也不是files !!!! 不是fields 也不是files !!!! 不是fields 也不是file ...

  3. TP 框架实现支付宝接口功能

    最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下: 一.下载支付宝接口包 下载地址: https://doc.open.alip ...

  4. crm开源系统 tp框架_thinkphp6学习教程与源码 tp6开源CMS系统源码研究

    thinkphp6最新正式版框架上市已经有一段时间了,从官方的介绍来看,tp6的框架和tp5有很大的区别,完全重新改写了底层架构代码和逻辑,所以不支持thinkphp5的无缝升级,也就是说如果你之前的 ...

  5. 「机器学习速成」分类,评估指标(TP、FP、TN、FN),ROC曲线和AUC

    https://www.toutiao.com/a6706449645901464078/ 2019-06-25 20:49:47 大家好,今天我们学习[机器学习速成]之 分类,评估指标(TP.FP. ...

  6. tp框架之Model类与命名空间

    1.获取系统常量信息 public function shuchu(){var_dump(get_defined_constants()); }2.跨控制器或跨模块调用 function diaoyo ...

  7. TP 720N V3 8M flash 无TTL 刷回原厂教程

    本帖最后由 zouxf014 于 2013-8-19 23:55 编辑 TP 720N V3  8M flash 无TTL 刷回原厂教程 " _2 C4 \% }5 G) j% A$ N * ...

  8. TP、TN、FP、FN

    True Positive (真正, TP)被模型预测为正的正样本: True Negative(真负 , TN)被模型预测为负的负样本 : False Positive (假正, FP)被模型预测为 ...

  9. TP 框架没有考虑完善的功能点:1、表达式查询不支持INSTR形式的查询

    2019独角兽企业重金招聘Python工程师标准>>> 如题 TP框架支持表达式查询,LT IN BETWEEN等,还可以使用 EXP 来表征直接使用原生级的表达式,但此方式都是以关 ...

  10. tp剩余未验证内容-8

    模型类的自动验证? 分为自动验证, 和 动态验证(手工验证), 前者的验证规则是定义在模型类中的, 所以要自己创建 扩展的/继承的模型类, 同时用 D方法实例化模型类 而动态验证是 先调用 valid ...

最新文章

  1. 周期同步位置模式(CSP),轮廓位置模式(PPM),位置模式(PM)
  2. 实验代做 行人识别_CVPR 2020 | 针对VI-ReID的分层跨模态行人识别
  3. 普通显示器开启freesync_【大小金刚显示器是什么?】之二代ROG PG279Q测试
  4. XFire WebService开发快速起步
  5. mysql statistics cpu_(2条消息) Mysql占用CPU过高如何优化,如何解决
  6. voms下的反射大师_大师们都爱磨砂,只有卒姆托将他发挥到极致
  7. 优化理论06-----共轭梯度法、线性共轭方向法、HS、FR-CG、PR-CG、PR+-CG
  8. 拓端tecdat|R语言CRAN软件包Meta分析
  9. UWP TextBox私人定制
  10. .NET简谈反射(动态调用)
  11. Windows11右键桌面没新建
  12. html字体中英文设置,用 CSS3 指定网页的中英文分别使用不同字体
  13. python选择结构练习(一)
  14. 未能将管道连接到虚拟机: 所有的管道范例都在使用中
  15. Elasticsearch之中文分词器插件es-ik的自定义热更新词库
  16. 2.石头游戏(坑爹)
  17. 阿里云和腾讯云香港服务器区别及如何选择?
  18. 【CC2530授课笔记】⑧ PWM实现呼吸灯,RGB三色灯,蜂鸣器播放音乐
  19. MATLAB课程笔记(二)——MATLAB基础知识
  20. 比较牛的竞赛总结和竞赛博客

热门文章

  1. 手把手教你如何导入源码,zookeeper为例
  2. notepad++设置自动刷新文本(中文版/英文版)
  3. Logistic逻辑回归用初等数学解读逻辑回归
  4. 推荐的字符与字符串处理方式
  5. java定时执行sql语句_spring中使用quartz动态添加定时任务执行sql
  6. ajax写入txt,javascript结合ajax读取txt文件内容
  7. signature=d522a0024e7d20dbfee94b566a5dfed5,End-to-end (e2e) application packet flow visibility
  8. linux终端<Terminal>使用ping
  9. python在生物中的应用_关于举办“Python编程语言在生物科学研究中的应用”学术报告的通知...
  10. 计算机原理与接口专科,春福师计算机原理与接口关键技术在线作业二.doc