Thinkphp最全教程thinkphp.docx

上传人:b****7 文档编号:9969230 上传时间:2023-02-07 格式:DOCX 页数:24 大小:129.55KB
下载 相关 举报
Thinkphp最全教程thinkphp.docx_第1页
第1页 / 共24页
Thinkphp最全教程thinkphp.docx_第2页
第2页 / 共24页
Thinkphp最全教程thinkphp.docx_第3页
第3页 / 共24页
Thinkphp最全教程thinkphp.docx_第4页
第4页 / 共24页
Thinkphp最全教程thinkphp.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

Thinkphp最全教程thinkphp.docx

《Thinkphp最全教程thinkphp.docx》由会员分享,可在线阅读,更多相关《Thinkphp最全教程thinkphp.docx(24页珍藏版)》请在冰豆网上搜索。

Thinkphp最全教程thinkphp.docx

Thinkphp最全教程thinkphp

Thinkphp教程

1熟悉Thinkphp

1.1什么是Thinkphp

Thinkphp是一个开源的PHP框架,遵循Apache2开源协议发布。

使用面向对象的开发结构和MVC模式,封装了CURD和一些常用操作,在模版引擎、缓存机制、认证机制和扩展性方面均有独特的表现。

1.2学习Thinkphp需要具备什么样的条件

学习框架前,你需要了解PHP、数据库的基础知识,同时对面向对象编程有一定了解,如果这些你还不具备,建议你先看看基础知识。

Web开发除了掌握服务端脚本,客户端的JS、CSS等方面的知识也是必不可少的。

所以我建议朋友们在开始使用框架时,先尽可能的充实自己,掌握基础知识。

开始后面的学习前,建议现把Thinkphp的开发手册看一遍,这样说到什么概念的时候你心中有数。

1.3我希望了解更多关于Thinkphp的信息

你可以访问官方网站。

建议下载Thinkphp的开发手册和API手册,便于查找相关信息。

1.4Thinkphp入门

(1)项目的创建

你可以到官方网站下载Thinkphp代码生成器,或者访问2.0支持。

运行代码生成器后选择菜单“项目”->“生产项目目录”,或者使用快捷键“Ctrl+G”打开项目目录生产程序,按要求填写配置信息即可。

这里数据库相关的信息我们留空。

thinkphp1.0.2版本使用Conf\config.php作为配置文件,而非以前的Conf\_config.php,请自行修改项目生成的批处理程序,修改一下配置文件的文件名。

事实上,thinkphp1.0.2版本有自动生成项目目录的功能,直接放置index.php到项目目录下,访问一下后项目其他目录自动生成。

(2)编写Helloworld示例

Thinkphp是单一入口模式,也就是说所有流程都是从index.php开始的。

项目目录下的index.php我们称之为入口文件。

你所编写的Action,使用http:

//server/project/index.php/Action/function的形式访问。

执行index.php的时候,Thinkphp的dispatch模块会自动分析应该加载哪个Action,并调用相应的函数。

Helloworld示例没有与数据库的交互,如果只是要输出一个“Helloworld”的字符串的话,我们在index.php里面echo都可以了。

不过这样的话没有达到演示框架的目的,我们按常规路线来搞:

如果直接访问http:

//server/project/index.php,框架默认调用IndexAction(这个默认的Action是可以配置的,详情参见Thinkphp开发手册),使用http:

//server/project/index.php/Action的形式,默认访问该Action的index方法。

所有Action、Model以及模板文件都应该使用UTF8编码。

我们在Lib\Action目录下编写一个IndexAction.class.php,内容如下:

php

classIndexActionextendsAction

{

functionindex()

{

echo“Helloworld”;

}

}

?

>

默认访问IndexAction的index方法,所以访问http:

//server/project/index.php和访问http:

//server/project/index.php/Index/index效果是一样的(Linux区分文件名大小写,所有应该确保Action名称大小写与文件名一致)。

页面输出Helloworld。

下面我们演示一下如何用模板输出变量。

在Tpl目录下新建default目录,这是默认的模板,多模板的话就建多个文件夹。

然后在default目录下新建Index目录,该目录名与Action对应。

然后新建index.html,该文件名默认与调用的方法一致。

编写index.html内容如下:

{$str}

然后我们修改开始编写的index方法,内容如下:

functionindex()

{

$this->assign(“str”,“Helloworld”);

$this->display();

}

访问http:

//server/project/index.php,页面源码为Helloworld

2Thinkphp的CURD

CURD需要涉及到数据库部分,而且模板显示内容一般也是跟数据库紧密集合的。

所以准备了一个非常简单的BBS的例子。

先看一下数据库结构。

user表很简单,只记录用户名密码和上次登录时间。

column表记录BBS分区,category记录BBS版面。

一个分区下面可以有多个版面。

page表记录BBS上的帖子。

主题帖的pid为0,跟帖的pid为主题帖的id。

2.1READ

涉及到数据库的话,就需要有Model。

在Lib的Model目录下编写PageModel.class.php

php

/*Thinkphp1.0的Model会自动分析数据库结构,所以写个空Model就OK了*/

classPageModelextendsModel

{

}

?

>

查询所有数据,在Lib的Action目录下编写PageAction.class.php内容如下

php

classPageActionextendsAction

{

functionindex()

{

$pagemodel=D(“Page”);

$result=$pagemodel->findAll();

//第一个参数填写查询条件,第二个参数为结果字段

dump($result);

}

}

?

>

如果只需要查一条记录,可以使用find方法

functionbyid()

{

$pagemodel=D("Page");

$result=$pagemodel->find("id='".$_GET["id"]."'");

dump($result);

}

更复杂一点的查询,需要结合Model和HashMap的查询条件来实现。

HashMap查询大家可以看看手册,自己多实验一下。

这里我演示一下Model相关的查询。

视图查询。

在Lib\Model目录下编写PageViewModel.class.php如下

php

classPageViewModelextendsModel{

protected$viewModel=true;

var$masterModel='Page';

//定义视图中的字段

protected$viewFields=array('Page'=>array('id','title','category_id','content','user_id','addtime','lastmodify','pid'),

'User'=>array('loginid')

);

//定义基础查询条件

protected$viewCondition=array("Page.user_id"=>array('eqf',"User.id"));

//定义视图主键名称

PublicfunctiongetPk(){

return'id';

}

}

?

>

上面定义了一个视图,将Page的user_id与user表的id对应,这样我们就可以在页面中直接查看发帖的用户的用户名了。

给PageAction实现一个pageview方法如下:

functionpageview()

{

$pageview=D("PageView");

$result=$pageview->findAll();

dump($result);

}

关联查询。

关联查询有好几种关系,具体见手册,我这里演示一下关联的HAS_MANY。

(TP核心文件的Model.class.php1238行,findAll应该有10个参数,早期版本的1.0RC1少了一个参数,请检查参数个数,如果只有9个参数,请在倒数第三个参数(true)前面加一个null;结合使用has_many和模板的sublist标签进行关联查询时,Model.class.php1238行的findAll最后一个参数应该使用false,否则数据查不出来)

我们定义一个ColumnModel.class.php,这是分区的数据表,每个分区下面有多个版面,是HAS_MANY的关系。

php

classColumnModelextendsModel{

var$category;//这个变量用来存放查出来的多个版面信息

var$_link=array(//设置关联关系

array('mapping_type'=>HAS_MANY,

'class_name'=>'Category',

'foreign_key'=>'`pid`',

'mapping_name'=>'category'

);

}

?

>

由于关联查询涉及到Category表,我们需要定义一个CategoryModel.class.php,内容很简单:

php

classCategoryModelextendsModel

{

}

?

>

下面可以开始关联查找了。

定义一个ColumnAction.class.php,内容如下:

php

classColumnActionextendsAction

{

functionindex()

{

$column=D(“Column”);

$result=$column->xfindAll();//xfind、xfindAll关联查询

dump($result);

}

}

?

>

其他关联,比如BLOGS_TO之类的,大家可以举一反三,多实验几次就能明白了。

2.2C操作

如何使用Model的add方法添加记录大家可以看看手册,这里我主要演示一下使用表格自动添加记录,后面将演示一下自动填充以及表格校验。

首先到tpl\default目录下添加一个名为Page的文件夹,添加一个add.html。

这个是发表新主题的页面,内容如下(__URL__表示当前Action,__APP__表示当前应用)注意:

所有文件都要使用UTF8编码:

发表新主题

标题
内容

需要注意的是,各个input的name默认跟数据表的字段同名,这样才能自动根据form的内容生产记录。

由于是主题帖发表,所以pid的value直接设置成0(跟帖页面上的pid的value需要设置成主题帖的id)。

category_id表示当前帖子属于那个分区,这个是在用户进入分区发帖时设置的。

给PageAction添加一个add方法,用来显示发表主题的页面,内容如下:

functionadd()

{

$this->assign(“cateid”,$_GET[“cid”]);

$this->display();

}

现在以及可以正确显示发帖页面了,下面就要开始编写insert方法,将帖子添加到数据库中

functioninsert()

{

$Pagemodel=D("Page");

$vo=$Pagemodel->create();

if(false===$vo){

die($Pagemodel->getError());

}

$topicid=$Pagemodel->add();//add方法会返回新添加的记录的主键值

if($topicid)

{

echo"发表主题成功";

}

else

throw_exception("发表主题失败");

}

下面我们修改一下PageModel,添加表格自动填充和校验的功能,修改后的PageModel.class.php文件如下

classPageModelextendsModel

{

var$_auto=array(

array('user_id','getUser','ALL','function'),

array('addtime','2007-12-22','ADD')

);

var$_validate=array(

array('title','require','标题必须!

'),

array('content','require','内容必须!

')

);

}

自动填充根据用户制定的规则填充数据表的指定字段,自动校验除了require以外,还可以使用正则表达式,详见手册。

2.3U操作

U操作与C操作大同小异,主要是使用Model的save方法保持记录。

不在赘述。

2.4D操作

D操作注意是Model的delete方法,我们演示一下根据ID删除帖子的功能,编写PageAction的delete方法如下

functiondelete()

{

$Pagemodel=D("Page");

$id=$_REQUEST['id'];

if($Pagemodel->deleteById($id))

echo“删帖成功”;

else

echo“删帖失败”;

}

3Thinkphp的模板机制

关于模板的详细介绍,请看手册关于模板的章节。

下面演示一下常用标签的使用。

最简单的是变量输出,这个在Helloworld里面以及演示过了,如果记不清楚如何输出变量,请参考第一节。

下面我们演示一下如何输出数组(对象)。

可以通过配置DATA_RESULT_TYPE,设置返回结果的类型(1:

对象,0:

数组)。

如果不配置,默认数据返回格式为数组。

一般情况下,模板中的变量无需区分其数组还是对象,Thinkphp在赋值的时候会自动判断。

使用上一节的PageAction的byid方法,我们格式化输出帖子内容。

在Tpl\default\Page目录下使用utf-8编码建一个byid.html模板,内容如下(第一行导入标签库):

ThinkphpDemo

{$vo.user_id}

title:

{$vo.title}

content:

{$vo.content}

addtime:

{$vo.addtime}

然后我们修改一下byid方法,将dump语句注释掉,添加:

$this->assign("vo",$result);//模板中我们使用的是vo变量

$this->display();//加载模板,输出

下面演示一下volist的使用,同时我们演示一下include标签。

volist相当于for循环。

很多朋友可能用过require(“header.htm”),require(“footer.htm”)这样的模板操作,include标签实际上就是这个作用。

我们首先在Tpl\default目录下建立一个public目录,一些公用的文件我们放在这个目录下。

建立header.html内容如下:

ThinkphpDemo

建立footer.html内容如下:

copyright2008yhustc

然后我们到Page的模板目录新建一个pageview.html,内容如下:

{$vo.loginid}

title:

{$vo.title}

content:

{$vo.content}

addtime:

{$vo.addtime}

可以看到,其实就是把刚才显示单个帖子的页面放到一个volist标签里面就可以实现循环了。

name是Action中将要赋值的变量,id是在volist内部使用的变量。

将pageview函数中的dump语句注释掉,添加:

$this->assign("result",$result);//模板中我们使用的是result变量

$this->display();//加载模板,输出

翻页操作

要做内容列表输出有一个很重要的问题就是分页显示。

用thinkphp做分页是很简单的。

下面我们演示一下。

还是刚才的pageview,我们修改一下函数。

在开始查询前,需要导入分页类,同时根据当前页数设置limit条件。

完整的pageview函数如下:

functionpageview()

{

$pageview=D("PageView");

$count=$pageview->count();//count函数参数是查询条件,默认没有where的条件限制

import("ORG.Util.Page");//导入分页类

if(!

empty($_REQUEST['listRows'])){

$listRows=$_REQUEST['listRows'];

}else{

$listRows=2;//listRows标识每页显示多少条记录

}

$p=newPage($count,$listRows);//根据总数和每页显示记录数生成Page类的对象

$result=$pageview->findAll('','*','idasc',$p->firstRow.','.$p->listRows);

$page=$p->show();//page类的show方法生成翻页的字符串

//dump($result);

$this->assign("result",$result);//模板中我们使用的是vo变量

$this->assign("page",$page);

$this->display();//加载模板,输出

}

主要就是增加了生成翻页函数的操作,同时findAll函数修改一下调用方式,将limit条件传入。

倒数第二行给一个叫page的模板变量赋值,所以我们也需要在模板中添加一个page。

在下面一行添加{$page}。

然后刷新页面,thinkphp自动生成了翻页链接。

内置list标签

如果只是单纯的进行列表操作,例如后台管理里面查看文章列表,使用list标签是个很方便的办法。

我们试着将分区内容作为列表显示。

给ColumnAction增加一个listpage操作如下:

functionlistpage()

{

$column=D("Column");

$result=$column->findAll();

$this->assign("result",$result);

$this->display();

}

listpage操作很普通,$result是select出来的结果,将其赋值给模板中的result变量。

现在看看模板的list标签如何写。

Tpl\default\Column\listpage.html内容如下:

listid="columnlist"datasource="result"name="vo"show="id:

编号,name:

名称|80%"/>

主要是配置datasource和show两个熟悉。

datasource就是刚才赋值的result。

show是要显示的列。

第一个是数据库select出来对应的字段,冒号后面的是标题,竖线后面的是列宽。

如果需要将字段进行函数处理,在字段后用|function的形式调用。

比如id|function:

函数处理后的编号|20%。

访问一下页面,thinkphp自动生成了一个表格。

你可以给这个表格指定css,也可以添加checkbox,添加action。

这些内容可以通过RBAC管理系统的Node的模板部分学习。

多级列表

有的时候需要用到多级列表。

比如显示一个BBS的分区,然后分区下面有很多版面。

这个时候可以使用sublist标签。

将Column的index操作的dump操作注释掉,添加:

$this->assign("result",$result);

$this->display();

通过上面的学习,相信

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1