




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一步一步循序渐进学习TP一(新手篇)前言TP的手册相当多,其实不必再出这样的贴子,论技术,我也是菜鸟一个,同时也在学习当中。看到论坛上多了不少新朋友,不少在抱怨手册看不懂,那我就姑且抛砖引玉,尝试与新朋友们更简单地、手把手地进入TP的应用中去。讲解过程中有错的地方,大家帮忙指正。这个系列,初步定下的目标为,从零开始,以TP示例中心中的Form为例进行讲解,以实践为主,理论为辅,将TP的最基本内容逛一遍,至少让我们一起学会如何进行最简单的对数据进行查、增、改、删操作并输出到模板。由于我们说的是循序渐进,所以我用步骤式来说明,只要一步一步跟着做,相信聪明的你在使用过程中就会明白TP的应用了。注意:以下的步骤,仅仅是TP灵活的布署方式其中一种,实际开发中可以根据自己的情况去另行设定。至于为什么那样做,我们会在最后再作总结,我觉得先实操然后再进行说明比较容易明白。以下不再重复解释。=一 快速开始一个项目名词解释: 项目:你要开发的系统,称之为项目。入口文件:你可以理解为这个项目的唯一一道门,以后所有的操作都会通过这道门去执行处理。不必理会什么意思,你甚至可以先把它看成是index.php就是入口文件TP: ThinkPHP框架的简称1 下载TP1.5正式版2 拟好你的项目名称,我们这里以 Myapp 为项目名称3 在www根目录下,将TP框架所有文件全部复制过去,文件夹名称是ThinkPHP4 与ThinkPHP同级新建一个文件夹,起名为 Myapp,也就是项目名称5 在www根目录下,创建一个PHP文件,起名index.php,这就是入口文件入口文件index.php代码: 1 run();14 ?复制代码就这么简单几行,然后打开浏览器,输入/一个TP项目就这样构建出来了。你会看到 15 _ Hello,欢迎使用ThinkPHP!复制代码这行字。并自动为你创建好项目的目录。接下来,我们这个项目添砖加瓦。=二 简单认识项目里的各个文件夹名词解释: Action:模块控制器类,你暂时可以理解为一个Action文件代表着一个应用模块,Action文件中的每一个方法(function)代表着一个操作,操作分为有输出到模板的操作和只具执行不需要输出的操作。对于有输出的操作,则代表了你的项目中一个展示给用户应用的web页面。(注意:这不是正统的术语解释)Model:数据表相对应的Model类,可以理解为一个Model文件对应着你项目数据库的其中一个表。命名关系请参看这里:/Article/10在添砖加瓦之前,我们有必要认识一下各个文件夹的用途。打开Myapp文件夹,里面TP已让你很省心地构建了最基本的目录。其中: Cache文件夹:项目自动生成的模版缓存会出现在这里Common文件夹:你的项目中要用到的自己写的函数,可以在这个文件夹下创建一个名为common.php文件,在这个文件中书写函数,这些函数可以用在你项目的各个类,同时也可以在模板变量中使用,TP框架会自动加载。Conf文件夹:项目的运行配置文件config.php将放在这个文件夹里,(还有路由配置,调试配置等,请先忽略)Data文件夹:TP会把项目的数据库表字段生成到这里,另外。那些先不必理会。Lang文件夹:项目的语言设置目录,先不必理会。Lib文件夹:应用类库目录,在这文件夹内还有两个文件夹:Action和Model,Action目录放置命名为xxxAction.class.php的控制器文件,Model目录放置对应数据库表的命名为xxxModel.class.php的类文件。Logs文件夹:项目中自动产生的日志文件会存放在这里。暂不必理会。Temp文件夹:数据缓存目录,存放项目中自动生成的项目运行缓存文件等,以及使用文件方式时的缓存文件等Tpl文件夹:模板文件目录,内有一个default文件夹,也就是默认的风格。项目生成的目录结构就先简单介绍到这里,下一步我们要简单地对项目进行最基本的配置。三 创建数据表,并对项目进行配置,以便连接到数据库。1 我们这里使用的是Mysql数据库,利用PhpMyadmin新建一个数据库,名称为myapp。使用示例中心中的sql如下: 16 CREATE TABLE think_form (17 id smallint(4) unsigned NOT NULL auto_increment,18 title varchar(255) NOT NULL,19 content varchar(255) NOT NULL,20 create_time int(11) unsigned NOT NULL,21 update_time int(11) unsigned NOT NULL,22 status tinyint(1) unsigned NOT NULL,23 email varchar(50) NOT NULL,24 PRIMARY KEY (id)25 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;复制代码2 在Conf文件夹内,建立一个config.php文件。这个文件,就是Myapp项目的配置文件。系统会自动加载config.php文件中的配置是以数组返回方式进行定义,会覆盖TP框架中的common目录下convention.php的默认配置。没有设置的配置,就以默认为准。配置设置可以利用C函数动态改变,暂且不必理会。而我们连接到数据库的设置也是在这个文件中书写。config.php代码如下: 26 mysql, / 使用的数据库是mysql30 DB_HOST=localhost,31 DB_NAME=myapp,/ 数据库名32 DB_USER=root,33 DB_PWD=123456,/ 填写你连接数据库的密码34 DB_PORT=3306,35 DB_PREFIX=think_, / 数据表表名的前缀 请参看/Article/1036 );37 ?复制代码暂时就是这样,后面会再根据需要进一步添加和讲解。3 在Lib/Model目录下,创建一个文件,命名为FormModel.class.php。命名规则刚才你已看了两次。这里就不再多说,我们可以看到,数据表名是think_form,由于我们配置了数据表表名的前缀为think_,所以文件的命名直接使用 不含前缀的数据表表名+Model.class.php就行了。在这个文件中书写代码: 3839 复制代码就这样定义一个类名就行了。该类继承了Model类。至于自动验证,自动过滤,自动填充这些,暂且不理会。4 提前先爽一下吧。再次利用PhpMyAdmin,在该表中插入一些数据sql如下: INSERT INTO think_form (id, title, content, 一步一步循序渐进学习TP一(新手篇)14344 create_time, update_time, status, email) VALUES45 (1, 这是测试数据, dfdf, 1212724876, 0, 1, );复制代码然后我们打开Myapp/Lib/Action/IndexAction.class.php文件,将里面的内容删掉。改成下面这样: 46 findall();50 dump ( $form );51 exit;52 53 54 ?复制代码打开浏览器,输入/,看,数据给输出来了。今天先到这里,下一步我们继续循序渐进。让我们一起把这个Form最后变成一个有会员功能的留言板。一步一步循序渐进学习TP二(新手篇)由于时间关系,此系列共同学习教程更新的速度会比较慢些,请多见谅,上一章节的内容请看这里。/viewthread.php?tid=4673&extra=page%3D1-PHP开发,无非是对数据库使用了逻辑控制的增删改查和使用模板输出数据内容。通常数据的插入都是通过表单来进行添加。表单提交涉及到页面显示,所以这一节我们暂时放下对数据库的操作讲解,先来简单学习一下TP的模板引擎的变量输出。第四节 简单了解TP的模板输出上一章节我们提及到, TP中的每一个xxxAction.class.php文件代表着一个应用模块,此Action中的每一个方法(function)代表着一个操作,操作分为有输出到模板的操作和只具执行不需要输出的操作。打开Myapp/Lib/Action/IndexAction.class.php文件,我们看看里面的基础代码 1 class IndexAction extends Action2 public function index()3 4 复制代码理论知识:1 在TP开发中,要增加一个应用模块,就在Action文件夹里建立一个类,类的文件命名格式是模块名称+Action.class.php。例如我们这里的应用模块是Index,所以定义文件名为IndexAction.class.php2 应用模块类的定义要继承框架的Action类。要为这个应用模块添加一个操作,则定义一个以此操作为命名的function.例如上面的index操作。通常一个应用模块中,会有若干操作(function)需要有与用户交互的页面,这就需要用到模板输出,TP本身已内置了一套具有TP特色的,很强大易扩展但应用非常方便兼简单的模板引擎。在应有模块中,如果某个操作是需要页面显示的,只要对应在Myapp/Tpl/default/里建立一个文件夹,文件夹以应用模块的名称来命名,然后在这个文件夹下,建立一个以这个function名称来命名的html文件,就可以在这个方法中使用$this-display()方法来直接调用该模板。(当然也可以调用其它模块下的其它模板或显式指定模板文件位置和名称,由于是循序渐进式的学习,就让我们先忽略吧)了解这些理论后,我们先简单实操一下这些知识。1 在Myapp/Tpl/default/下建立一个文件夹,根据应用模块的名称,我们将这个文件夹命名为Index2 在Myapp/Tpl/default/Index/下建立一个html文件,根据操作名称,我们命名该文件为index.html3 打开Myapp/Lib/Action/IndexAction.class.php文件,修改代码为 5 assign(name,$value);10 $this-display();11 12 13 ?复制代码代码知识要点(摘自手册:ThinkPHP模板指南,此后的知识要点均来自TP官方手册,不再申明)在Action类里面使用 assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值。 14 $this-assign(name,$value);复制代码/ 下面的写法是等效的 15 $this-name = $value ;复制代码/ 模板变量赋值后就需要调用模板文件来输出相关的变量,模板调用通过display方法来实现 16 $this-display();复制代码4 打开Myapp/Tpl/default/Index/index.html文件,代码为 17 18 19 20 $name21 22 23 测试输出: $name24 25 复制代码代码知识要点:模板变量使用$变量名称这种标签进行输出。不同的模板变量类型,使用不同的标签,标签可以自行另外定义,暂且不理会。5 打开浏览器输入地址:/,我们可以看到,定义的模板变量已经输出来了。附加补充知识:1 如果要同时输出多个模板变量,可以使用下面的方式: 26 $array = array();27 $arrayname = thinkphp;28 $arrayemail = ;29 $arrayphone = 12335678;30 $this-assign($array);复制代码这样,就可以在模板文件中同时输出name、email和phone三个变量。2 我们使用上面的变量定义,将整个数组定义为一个模板变量来输出 31 $array = array();32 $arrayname = thinkphp;33 $arrayemail = ;34 $arrayphone = 12335678;35 $this-assign(array,$array);36 $this-display();复制代码在html中,要输出$arrayname的值,代码是 37 $ 或 $arrayname复制代码3 将这个数组循环输出3.1 IndexAction.class.php中代码更改如下 38 assign(array,$array);47 $this-assign(name,$value);48 $this-display();49 50 51 ?复制代码3.2 将Myapp/Tpl/default/Index/index.html代码更改如下: 52 53 54 55 $name56 57 58 59 $vo60 61 62 复制代码代码知识要点:name=array是指要循环的模板变量是array,id=vo是指这个数据在模板输出时所使用的名称对于TP的模板引擎输出先简单了解到这里。第五节 初步了解URL如何访问模块操作通过前面的学习,我们已大概地明白了应用模块中的操作与模板如何对应。而这一节将简单讲解如何通过URL来访问操作。由于我们要循序渐进,所以先只介绍下面章节要用到的知识,要想深入学习还请参看官方手册URL设计和SEO支持TP支持四种URL访问方式,默认是智能模式,所以我们就这种模式进行简要说明。智能模式下的URL基本结构是这样的http:/servername/appName/moduleName/actionName/params你可以理解为http:/ 服务器地址/ 入口文件位置/ 应用模块名称/具体操作名称/GET变量参数解释一下上面文字中所译的URL结构,为什么appname项目名称我将它译成了入口文件位置:通常情况下,我们的入口文件index.php都是放在根目录中,这时项目名称就会被入口文件index.php所替代。在前几节里,我们已知道,一个Action文件就是一个应用模块,而应用模块中的每个方法(function)就是一个具体操作。因此,假如要访问我们实例中的Index模块下的index操作。地址应该是/index.php/Index/index如果入口文件不是在服务器的根目录,而是在myapp目录下,那么入口文件位置就是 Myapp/index.php,此时上面的URL访问就相应要换成/Myapp/index.php/Index/index这样说理应很清楚了,不过别让这么多index给混乱咯,对应URL的结构去明白每一个index的函义,同时注意大小写简单实操:1 打开Myapp/Lib/Action/IndexAction.class.php文件,在index这个function下再添加一个操作test 1 assign(array,$array);10 $this-assign(name,$value);11 $this-display();12 13 public function test()14 header(Content-Type:text/html; charset=utf-8);15 echo 哈,访问正确!;16 17 / 类定义end18 ?复制代码2 尝试对应URL结构,来访问这个test操作,如果能成功看到echo的文字。则这节我们又学会了多一点知识。附加知识点: 去掉URL里面的index.php 要去掉URL里的入口文件index.php,使URL类似这样的形式 /Index/index 可以按官方手册所提供的方法进行如下操作。 1 确认httpd.conf配置文件中加载了mod_rewrite.so模块 2 AllowOverride None 将None改为 All 3 打开Myapp/Conf/config.php文件,在配置的数组中添加一行: URL_MODEL=2, 在入口文件所在的同级目录下,新建一个.htaccess文件,内容是 19 20 RewriteEngine on21 RewriteCond %REQUEST_FILENAME !-d22 RewriteCond %REQUEST_FILENAME !-f23 RewriteRule (.*)$ index.php/$1 QSA,PT,L24 复制代码如果你的服务器环境支持rewrite,使用/Index/index就可以正常访问到Index模块的index操作了。 此后我们的学习中用到的URL,都是假定你使用了rewrite的情况注意:看到不少留言说操作不成功或出错,请别忘记,此系列教程出来时,TP1.6还没出来,所以系列6之前所介绍的示例和操作都还是标准版本1.5的,如果你使用1.6版,请对应两者差异性。例如submit不能有name属性,是因为原来1.5有字段缓存进行过滤处理。1.6没有了字段缓存。例如数据自动验证和自动填充都有了一定的区别。关于1.6的使用可以下载快速入门教程,是此系列新手篇的完整版,并且附有示例源码。-第六节 CURD知识之一 C 创建(create)从这一节开始,我们就要涉及到数据库操作,TP对数据库的操作非常简便,以下是一些基础知识讲解。名词解析:1 CURD:代表数据库四个基本操作:创建:create,更新:update,读取:read,删除:delete2 模型对象:即数据对象,你项目里每一个Model类文件都会对应着一个数据表(或者视图),模型与数据表存在一种映射关系。TP约定了命名要遵循一定的规范,如果不符合,则需要根据情况进行额外的相应设置。例如Model类的tableName属性在第三节时,曾略为提到Model类文件命名,现在再回顾一下这部分的内容:我们之前在数据库中,已建立了一个think_form数据库表,并且在配置文件config.php中,我们定义了数据表的前缀是think_,模型类(Model)文件的命名规则是: 不包括前缀的数据库表表名并且首字母大写+Model.class.php所以之前我们为think_form数据表在Myapp/Lib/Model目录下建立一个文件FormModel.class.php模型类的特殊命名还可以智能识别驼峰式的表命名,假设我们有个是类似think_new_table这样的表可以命名为NewTableModel.class.php。默认配置便可以智能识别自动对应think_new_table表,因此不必修改配置。开发过程中,只要简单地定义好与数据表对应的模型类(xxxModel.class.php),就可以进行对数据操作了。如何让这个模型支持自动验证,自动填充,自动过滤这些知识,在下面涉及到时会作相应讲解。一般来说,在表中添加数据都是通过表单来建立,为了更直观地学习CURD中的C,我们接下来建立个表单来进行添加数据的操作。之前我们已在Myapp/Lib/Model/下建立好FormModel.class.php类-模型(M)同时也在Myapp/Lib/Action/下添加了一个Index应用模块和写下了一个index操作-控制器(C)并且在Tpl目录下建立了与之对应的模板目录Index及index.html模板文件 -视图(V)MVC模式的开发已体现了出来。tdweb曾简明扼要地概括了TP中这三者的关系, C的作用,就是从M中取得数据到V,使用TP以表单提交数据到库,流程和你所了解的表单提交没有什么区别,只是TP简化了数据操作的处理过程。我们在实际操作中体会一下。先来看看我们所定义的数据表form的字段: 1 id,/自动编号2 title,/标题3 content,/内容4 create_time,/创建时间5 update_time/更新时间6 email,/邮箱7 status,/状态复制代码其中的create_time字段是为了记录数据插入的时间,我们可以利用TP的数据自动填充来处理。 在Model类定义 $_auto 属性,可以完成数据自动处理功能,用来处理默认值和其他系统写入字段。注意1:该自动填充可能会覆盖表单提交项目。其目的是为了防止表单非法提交字段。注意2:要使用Model类的create方法创建数据对象的时候才会自动进行表单数据处理。1 打开Myapp/Lib/Model/FormModel.class.php文件,更改代码为 8 复制代码代码知识要点:Model类的$_auto属性由多个填充因子组成的数组,填充因子定义格式:array(填充字段,填充内容,填充条件,附加规则)填充字段:就是需要进行处理的表单字段,这个字段并不一定要是数据库表中的字段,对于表单内的辅助检测字段比如重复密码和验证码也可以处理。填充条件:ADD | UPDATE | ALL(注意,此是1.5版本说明,1.6已改为1 2 3,后续教程有说明)当为ADD时,会在新增数据时自动填充,这是默认的处理方式当为UPDATE时,在更新数据的时候会自动填充当为ALL时,所有情况下都会进行自动填充附加规则:附加规则是针对填充内容而言,表示该内容填充的方式,包括function,callback,field,string对于field使用其它字段进行填充和string直接标示字符串作为值进行填充很好理解。例如上面 17 array(status,1,ADD),复制代码就是将状态status字段的值直接以1填充.下面主要说说function与callback这两个附加规则。 18 protected $_auto = array(19 array(create_time,time,ADD,function),20 );复制代码上面create_time代表了要处理的字段,填充内容是time,附加规则是function使用函数,填充条件是ADD新增时处理,那么整行代码表示对create_time字段在新增的时候使time函数作为该字段的值进行自动填充。再看一个function作为附加规则的例子 21 protected $_auto = array(22 array(password,md5,ADD,function),23 );复制代码当使用function作为附加规则时,第二个填充内容就代表了这个因子是一个函数名称,该函数的参数就是代表填充字段的值,比如password的值是123456,则上面的代码会先将这个值使用函数md5(123456),这样处理后再插入到数据表中去。对于function(函数)和callback(回调方法)理论是一样的,只不过一个是表示填充内容所写的是函数名,另一个是表示填充内容是类中的方法名。函数可以是PHP5内置函数或你自己所写的函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省云县2025年上半年事业单位公开遴选试题含答案分析
- 河北省易县2025年上半年公开招聘城市协管员试题含答案分析
- 2025年房屋购买与配套设施安装合同
- 2025版铁路客户服务中心客户满意度调查与提升方案合同
- 2025出租居间合同协议书范本:城市综合体租赁服务
- 2025褚之与吴刚的离婚协议书及共同财产分割及子女抚养合同
- 2025年度砼工程劳务分包与进度控制合同
- 2025年度水泥井盖绿色环保认证采购合同约定
- 2025年度文化创意园场地租赁及配套运营管理协议
- 2025年度柴油油品批发与零售价格指数合同
- (2025秋新修订)人教版三年级数学上册全册教案(教学设计)
- 2025年秋季学期学校全面工作计划
- 2024-2030年钻石行业市场调研及前景趋势预测报告
- 老高糖健康管理培训课件
- 璧山区辅警考试题及答案
- 广西壮族自治区瑶药材质量标准第一卷
- GB 35574-2017热电联产单位产品能源消耗限额
- 催化重整装置大赛题库(技师、高级技师)
- 意外伤害急救常识及绷带包扎法课件
- 硫酸法钛白生产工艺操作规程
- 柴油供货合同范本模板
评论
0/150
提交评论