zoukankan      html  css  js  c++  java
  • 20150317--TP

    image

    1、 表名操作

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

    ‘DB_PREFIX' =>‘think_’

    tp中默认的表前缀是think_

    如:数据库表名

    wps5B92.tmp

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

    wps5BA2.tmp

    项目就可以正常工作。

    wps5BB3.tmp

    tableName:

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

    wps5BB4.tmp

    trueTableName:

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

    wps5BC5.tmp

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

    wps5BC6.tmp

    2、 事务处理

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

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

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

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

    什么情况下使用事务:

    要么都成功,要么都失败

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

    wps5BF6.tmp

    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();

    wps5C06.tmp

    2) 修改数据

    l $User->find(1); 

    l $User->name = 'TOPThink'; 

    l $User->save(); 

    wps5C07.tmp

    3) 删除数据

    l $User->delete(8); 

    wps5C18.tmp

    4) 查询数据

    l $User = M("User"); 

    l $User->find(8);

    l echo $User->name;

    l echo $User->email;

    wps5C19.tmp

    TP中AR模式的原理:

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

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

    wps5C29.tmp

    wps5C3A.tmp

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

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

    综上所述:

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

    add方法举例:

    wps5C4B.tmp

    wps5C5B.tmp

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

    4、 联贯操作

    l where

    l order

    l limit

    l field

    l group

    语法:

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

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

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

    wps5C5C.tmp

    wps5C6D.tmp

    5、 统计查询

    l count :查询数据总行数

    l max :取最大值

    l min :取最小值

    l avg :平均值

    l sum :求和

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

    wps5C7E.tmp

    一、 实用项

    1、 设置trace信息

    1) 开启调试模式

    wps5C8E.tmp

    2) 开启跟踪信息机制

    config.php配置文件

    wps5C8F.tmp

    wps5CA0.tmp

    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机制默认是开启的,可以通过更改配置文件来控制

    wps5CB0.tmp

    2) cookie的相关方法

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

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

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

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

    session案例:

    wps5CC1.tmp

    项目登录案例:

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

    3、 文件载入

    1) 函数文件

    (1)common.php

    Common/common.php

    文件位置:

    wps5CD2.tmp

    文件内容:

    wps5CD3.tmp

    引用函数:

    wps5CE3.tmp

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

    (2)config.php

    LOAD_EXT_FILE=“user”

    文件位置:

    wps5CE4.tmp

    文件内容:

    wps5CF5.tmp

    配置文件:

    wps5CF6.tmp

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

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

    Common/user.php

    文件位置:

    wps5CF7.tmp

    程序:

    wps5CF8.tmp

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

    2) 类文件

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

    ORG/Util/User.class.php

    文件位置:

    wps5D09.tmp

    控制器:

    wps5D0A.tmp

    运行:

    wps5D68.tmp

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

    Lib/Common/User.class.php

    文件位置:

    wps5D79.tmp

    控制器:

    wps5D7A.tmp

    总结:

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

    import(‘ORG.Util.User’);

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

    import (‘@.Common.User’);

    4、 验证码

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

    wps5D8B.tmp

    Image类的使用方式:

    wps5DBA.tmp

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

    wps5DCB.tmp

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

    wps5DCC.tmp

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

    wps5DDD.tmp

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

    wps5DED.tmp

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

    wps5DFE.tmp

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

    wps5E0F.tmp

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

    wps5E10.tmp

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

    5、 数据分页

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

    wps5E20.tmp

    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();

    代码:

    wps5E31.tmp

    模板:

    wps5E51.tmp

    运行:

    wps5E52.tmp

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

    l setConfig

    l header

    l prev

    l next

    l first

    l last

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

    wps5E63.tmp

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

    wps5E64.tmp

    运行:

    wps5E84.tmp

  • 相关阅读:
    hdu1418 欧拉公式
    hdu1215七夕节 筛选法求公因子和
    hdu1215 The area
    hdu1005Number Sequence
    hdu1021 数学题 并不是说难,而是数学题那种简单朴素的思想get不到
    Mongo第三个参数的用法
    js 显示刚刚上传的图片 (onchange事件)
    在linux中安装memcache服务器
    jQuery 倒计时
    PHP获取文章发布时间
  • 原文地址:https://www.cnblogs.com/lifushan/p/5471607.html
Copyright © 2011-2022 走看看