1、前言TP 的手册相当多,其实不必再出这样的贴子,论技术,我也是菜鸟一个,同时也在学习当中。看到论坛上多了不少新朋友,不少在抱怨手册看不懂,那我就姑且抛砖引玉,尝试与新朋友们更简单地、手把手地进入 TP 的应用中去。讲解过程中有错的地方,大家帮忙指正。这个系列,初步定下的目标为,从零开始,以 TP 示例中心中的 Form 为例进行讲解,以实践为主,理论为辅,将 TP 的最基本内容逛一遍,至少让我们一起学会如何进行最简单的对数据进行查、增、改、删操作并输出到模板。由于我们说的是循序渐进,所以我用步骤式来说明,只要一步一步跟着做,相信聪明的你在使用过程中就会明白 TP 的应用了。注意:以下的步骤,仅
2、仅是 TP 灵活的布署方式其中一种,实际开发中可以根据自己的情况去另行设定。至于为什么那样做,我们会在最后再作总结,我觉得先实操然后再进行说明比较容易明白。以下不再重复解释。一 快速开始一个项目名词解释: 项目:你要开发的系统,称之为项目。入口文件:你可以理解为这个项目的唯一的一道门,以后所有的操作都会通过这道门去执行处理。不必理会什么意思,你甚至可以先把它看成是 index.php就是入口文件TP: ThinkPHP 框架的简称1 下载 TP1.5 正式版2 拟好你的项目名称,我们这里以 Myapp 为项目名称3 在 www 根目录下,将 TP 框架所有文件全部复制过去,文件夹名称是Thin
3、kPHP4 与 ThinkPHP 同级新建一个文件夹,起名为 Myapp,也就是项目名称5 在 www 根目录下,创建一个 PHP 文件,起名 index.php,这就是入口文件入口文件 index.php 代码: run();?就这么简单几行,然后打开浏览器,输入 http:/127.0.0.1/一个 TP 项目就这样构建出来了。你会看到 _ Hello,欢迎使用 ThinkPHP!这行字。并自动为你创建好项目的目录。接下来,我们这个项目添砖加瓦。二 简单认识项目里的各个文件夹名词解释: Action:模块控制器类,你暂时可以理解为一个 Action 文件代表着一个应用模块,Action 文
4、件中的每一个方法(function)代表着一个操作,操作分为有输出到模板的操作和只具执行不需要输出的操作。对于有输出的操作,则代表了你的项目中一个展示给用户应用的 web 页面。(注意:这不是正统的术语解释)Model:数据表相对应的 Model 类,可以理解为一个 Model 文件对应着你项目数据库的其中一个表。命名关系请参看这里:http:/ Myapp 文件夹,里面 TP 已让你很省心地构建了最基本的目录。其中: Cache 文件夹:项目自动生成的模版缓存会出现在这里Common 文件夹:你的项目中要用到的自己写的函数,可以在这个文件夹下创建一个名为 common.php 文件,在这个文
5、件中书写函数,这些函数可以用在你项目的各个类,同时也可以在模板变量中使用,TP 框架会自动加载。Conf 文件夹:项目的运行配置文件 config.php 将放在这个文件夹里,(还有路由配置,调试配置等,请先忽略)Data 文件夹:TP 会把项目的数据库表字段生成到这里,另外。那些先不必理会。Lang 文件夹:项目的语言设置目录,先不必理会。Lib 文件夹:应用类库目录,在这文件夹内还有两个文件夹:Action 和Model,Action 目录放置命名为 xxxAction.class.php 的控制器文件,Model 目录放置对应数据库表的命名为 xxxModel.class.php 的类文
6、件。Logs 文件夹:项目中自动产生的日志文件会存放在这里。暂不必理会。Temp 文件夹:数据缓存目录,存放项目中自动生成的项目运行缓存文件等,以及使用文件方式时的缓存文件等Tpl 文件夹:模板文件目录,内有一个 default 文件夹,也就是默认的风格项目生成的目录结构就先简单介绍到这里,下一步我们要简单地对项目进行最基本的配置。三 创建数据表,并对项目进行配置,以便连接到数据库。1 我们这里使用的是 Mysql 数据库,利用 PhpMyadmin 新建一个数据库,名称为myapp。使用示例中心中的 sql 如下: CREATE TABLE think_form (id smallint(4
7、) unsigned NOT NULL auto_increment,title varchar(255) NOT NULL,content varchar(255) NOT NULL,create_time int(11) unsigned NOT NULL,update_time int(11) unsigned NOT NULL,status tinyint(1) unsigned NOT NULL,email varchar(50) NOT NULL,PRIMARY KEY (id) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;2 在 Conf 文件夹内,建
8、立一个 config.php 文件。这个文件,就是 Myapp 项目的配置文件。系统会自动加载config.php 文件中的配置是以数组返回方式进行定义,会覆盖 TP 框架中的common 目录下 convention.php 的默认配置。没有设置的配置,就以默认为准。配置设置可以利用 C 函数动态改变,暂且不必理会。而我们连接到数据库的设置也是在这个文件中书写。config.php 代码如下: mysql, / 使用的数据库是 mysqlDB_HOST=localhost,DB_NAME=myapp,/ 数据库名DB_USER=root,DB_PWD=123456,/ 填写你连接数据库的密码
9、DB_PORT=3306,DB_PREFIX=think_, / 数据表表名的前缀 请参看 http:/ 在 Lib/Model 目录下,创建一个文件,命名为 FormModel.class.php。命名规则刚才你已看了两次。这里就不再多说,我们可以看到,数据表名是 think_form,由于我们配置了数据表表名的前缀为 think_,所以文件的命名直接使用 “不含前缀的数据表表名+Model.class.php“就行了。在这个文件中书写代码: 就这样定义一个类名就行了。该类继承了 Model 类。至于自动验证,自动过滤,自动填充这些,暂且不理会。4 提前先爽一下吧。再次利用 PhpMyAdm
10、in,在该表中插入一些数据sql 如下: INSERT INTO think_form (id, title, content, create_time, update_time, status, email) VALUES(1, 这是测试数据 , dfdf, 1212724876, 0, 1, );然后我们打开 Myapp/Lib/Action/IndexAction.class.php 文件,将里面的内容删掉。改成下面这样: findall();dump ($form);exit;?打开浏览器,输入 http:/127.0.0.1/,看,数据给输出来了。PHP 开发,无非是对数据库使用了逻
11、辑控制的增删改查和使用模板输出数据内容。通常数据的插入都是通过表单来进行添加。表单提交涉及到页面显示,所以这一节我们暂时放下对数据库的操作讲解,先来简单学习一下 TP 的模板引擎的变量输出。第四节 简单了解 TP 的模板输出上一章节我们提及到, TP 中的每一个 xxxAction.class.php 文件代表着一个应用模块,此 Action 中的每一个方法(function)代表着一个操作,操作分为有输出到模板的操作和只具执行不需要输出的操作。打开 Myapp/Lib/Action/IndexAction.class.php 文件,我们看看里面的基础代码 class IndexAction
12、extends Actionpublic function index()理论知识:1 在 TP 开发中,要增加一个应用模块,就在 Action 文件夹里建立一个类,类的文件命名格式是模块名称+Action.class.php。例如我们这里的应用模块是Index,所以定义文件名为 IndexAction.class.php2 应用模块类的定义要继承框架的 Action 类。要为这个应用模块添加一个操作,则定义一个以此操作为命名的 function.例如上面的 index 操作。通常一个应用模块中,会有若干操作(function)需要有与用户交互的页面,这就需要用到模板输出, TP 本身已内置了
13、一套具有 TP 特色的,很强大易扩展但应用非常方便兼简单的模板引擎。在应有模块中,如果某个操作是需要页面显示的,只要对应在Myapp/Tpl/default/里建立一个文件夹,文件夹以应用模块的名称来命名,然后在这个文件夹下,建立一个以这个 function 名称来命名的 html 文件,就可以在这个方法中使用$this-display()方法来直接调用该模板。(当然也可以调用其它模块下的其它模板或显式指定模板文件位置和名称,由于是循序渐进式的学习,就让我们先忽略吧)了解这些理论后,我们先简单实操一下这些知识。1 在 Myapp/Tpl/default/下建立一个文件夹,根据应用模块的名称,我
14、们将这个文件夹命名为 Index2 在 Myapp/Tpl/default/Index/下建立一个 html 文件,根据操作名称,我们命名该文件为 index.html3 打开 Myapp/Lib/Action/IndexAction.class.php 文件,修改代码为 assign(name,$value);$this-display();?代码知识要点(摘自手册:ThinkPHP 模板指南,此后的知识要点均来自 TP 官方手册,不再申明)在 Action 类里面使用 assign 方法对模板变量赋值,无论何种变量类型都统一使用 assign 赋值。 $this-assign(name,$
15、value);/ 下面的写法是等效的 $this-name = $value ;/ 模板变量赋值后就需要调用模板文件来输出相关的变量,模板调用通过display 方法来实现 $this-display();4 打开 Myapp/Tpl/default/Index/index.html 文件,代码为 $name测试输出: $name代码知识要点:模板变量使用$变量名称这种标签进行输出。不同的模板变量类型,使用不同的标签,标签可以自行另外定义,暂且不理会。5 打开浏览器输入地址:http:/127.0.0.1/,我们可以看到,定义的模板变量已经输出来了。附加补充知识:1 如果要同时输出多个模板变量
16、,可以使用下面的方式: $array = array();$arrayname = thinkphp;$arrayemail = ;$arrayphone = 12335678;$this-assign($array);这样,就可以在模板文件中同时输出 name、email 和 phone 三个变量。2 我们使用上面的变量定义,将整个数组定义为一个模板变量来输出 $array = array();$arrayname = thinkphp;$arrayemail = ;$arrayphone = 12335678;$this-assign(array,$array);$this-display
17、();在 html 中,要输出$arrayname的值,代码是 $array.name 或 $arrayname3 将这个数组循环输出3.1 IndexAction.class.php 中代码更改如下 assign(array,$array);$this-assign(name,$value);$this-display();?3.2 将 Myapp/Tpl/default/Index/index.html 代码更改如下: $name$vo代码知识要点:name=array是指要循环的模板变量是 array,id=vo是指这个数据在模板输出时所使用的名称对于 TP 的模板引擎输出先简单了解到这
18、里。第五节 初步了解 URL 如何访问模块操作通过前面的学习,我们已大概地明白了应用模块中的操作与模板如何对应。而这一节将简单讲解如何通过 URL 来访问操作。由于我们要循序渐进,所以先只介绍下面章节要用到的知识,要想深入学习还请参看官方手册 URL 设计和SEO 支持TP 支持四种 URL 访问方式,默认是智能模式,所以我们就这种模式进行简要说明。智能模式下的 URL 基本结构是这样的http:/servername/appName/moduleName/actionName/params你可以理解为http:/ 服务器地址 / 入口文件位置 / 应用模块名称 /具体操作名称/ GET变量参
19、数解释一下上面文字中所译的 URL 结构,为什么 appname 项目名称我将它译成了入口文件位置:通常情况下,我们的入口文件 index.php 都是放在根目录中,这时项目名称就会被入口文件 index.php 所替代。在前几节里,我们已知道,一个 Action 文件就是一个应用模块,而应用模块中的每个方法(function)就是一个具体操作。因此,假如要访问我们实例中的 Index 模块下的 index 操作。地址应该是http:/127.0.0.1/index.php/Index/index如果入口文件不是在服务器的根目录,而是在 myapp 目录下,那么入口文件位置就是 Myapp/i
20、ndex.php,此时上面的 URL 访问就相应要换成http:/127.0.0.1/Myapp/index.php/Index/index这样说理应很清楚了,不过别让这么多 index 给混乱咯,对应 URL 的结构去明白每一个 index 的函义,同时注意大小写简单实操:1 打开 Myapp/Lib/Action/IndexAction.class.php 文件,在 index 这个function 下再添加一个操作 test assign(array,$array);$this-assign(name,$value);$this-display();public function tes
21、t()header(“Content-Type:text/html; charset=utf-8“);echo 哈,访问正确!; / 类定义 end?2 尝试对应 URL 结构,来访问这个 test 操作,如果能成功看到 echo 的文字。则这节我们又学会了多一点知识。附加知识点:去掉 URL 里面的 index.php要去掉 URL 里的入口文件 index.php,使 URL 类似这样的形式http:/127.0.0.1/Index/index可以按官方手册所提供的方法进行如下操作。1 确认 httpd.conf 配置文件中加载了 mod_rewrite.so 模块2 AllowOverr
22、ide None 将 None 改为 All3 打开 Myapp/Conf/config.php 文件,在配置的数组中添加一行:URL_MODEL=2,在入口文件所在的同级目录下,新建一个.htaccess 文件,内容是 RewriteEngine onRewriteCond %REQUEST_FILENAME !-dRewriteCond %REQUEST_FILENAME !-fRewriteRule (.*)$ index.php/$1 QSA,PT,L如果你的服务器环境支持 rewrite,使用 http:/127.0.0.1/Index/index 就可以正常访问到 Index 模块
23、的 index 操作了。 此后我们的学习中用到的 URL,都是假定你使用了 rewrite 的情况第六节 CURD 知识之一 C 创建(create)从这一节开始,我们就要涉及到数据库操作,TP 对数据库的操作非常简便,以下是一些基础知识讲解。名词解析:CURD:代表数据库四个基本操作:创建:create,更新:update,读取:read,删除:delete模型对象:即数据对象,你项目里每一个 Model 类文件都会对应着一个数据表(或者视图),模型与数据表存在一种映射关系。TP 约定了命名要遵循一定的规范,如果不符合,则需要根据情况进行额外的相应设置。例如 Model 类的tableNam
24、e 属性在第三节时,曾略为提到 Model 类文件命名,现在再回顾一下这部分的内容:我们之前在数据库中,已建立了一个 think_form 数据库表,并且在配置文件config.php 中,我们定义了数据表的前缀是 think_,模型类(Model)文件的命名规则是:不包括前缀的数据库表表名并且首字母大写+Model.class.php 所以之前我们为 think_form 数据表在 Myapp/Lib/Model 目录下建立一个文件FormModel.class.php 模型类的特殊命名还可以智能识别驼峰式的表命名,假设我们有个是类似 think_new_table 这样的表可以命名为New
25、TableModel.class.php。默认配置便可以智能识别自动对应think_new_table 表,因此不必修改配置。开发过程中,只要简单地定义好与数据表对应的模型类(xxxModel.class.php),就可以进行对数据操作了。如何让这个模型支持自动验证,自动填充,自动过滤这些知识,在下面涉及到时会作相应讲解。一般来说,在表中添加数据都是通过表单来建立,为了更直观地学习 CURD 中的 C,我们接下来建立个表单来进行添加数据的操作。之前我们已在 Myapp/Lib/Model/下建立好 FormModel.class.php 类-模型(M)同时也在 Myapp/Lib/Action
26、/下添加了一个 Index 应用模块和写下了一个 index操作-控制器(C)并且在 Tpl 目录下建立了与之对应的模板目录 Index 及index.html 模板文件 -视图(V)MVC 模式的开发已体现了出来。tdweb曾简明扼要地概括了 TP 中这三者的关系, C 的作用,就是从 M 中取得数据到 V,使用 TP 以表单提交数据到库,流程和你所了解的表单提交没有什么区别,只是TP 简化了数据操作的处理过程。我们在实际操作中体会一下。先来看看我们所定义的数据表 form 的字段: id,/自动编号title,/标题content,/内容create_time,/创建时间update_ti
27、me/更新时间email,/邮箱status,/状态其中的 create_time 字段是为了记录数据插入的时间,我们可以利用 TP 的数据自动填充来处理。 在 Model 类定义 $_auto 属性,可以完成数据自动处理功能,用来处理默认值和其他系统写入字段。注意 1:该自动填充可能会覆盖表单提交项目。其目的是为了防止表单非法提交字段。注意 2:要使用 Model 类的 create 方法创建数据对象的时候才会自动进行表单数据处理。1 打开 Myapp/Lib/Model/FormModel.class.php 文件,更改代码为 代码知识要点:Model 类的$_auto 属性由多个填充因子
28、组成的数组,填充因子定义格式:array(填充字段,填充内容,填充条件,附加规则)填充字段:就是需要进行处理的表单字段,这个字段并不一定要是数据库表中的字段,对于表单内的辅助检测字段比如重复密码和验证码也可以处理。填充条件:ADD | UPDATE | ALL(注意,此是 1.5 版本说明,1.6 已改为 1 2 3,后续教程有说明)当为 ADD 时,会在新增数据时自动填充,这是默认的处理方式当为 UPDATE 时,在更新数据的时候会自动填充当为 ALL 时,所有情况下都会进行自动填充附加规则:附加规则是针对填充内容而言,表示该内容填充的方式,包括function,callback,field
29、,string对于 field 使用其它字段进行填充和 string 直接标示字符串作为值进行填充很好理解。例如上面 array(status,1,ADD),就是将状态 status 字段的值直接以 1 填充.下面主要说说 function 与 callback 这两个附加规则。 protected $_auto = array(array(create_time,time,ADD,function),);上面 create_time 代表了要处理的字段,填充内容是 time,附加规则是function 使用函数,填充条件是 ADD 新增时处理,那么整行代码表示对create_time 字段在
30、新增的时候使 time 函数作为该字段的值进行自动填充。再看一个 function 作为附加规则的例子 protected $_auto = array(array(password,md5,ADD,function),);当使用 function 作为附加规则时,第二个填充内容就代表了这个因子是一个函数名称,该函数的参数就是代表填充字段的值,比如 password 的值是123456,则上面的代码会先将这个值使用函数 md5(123456),这样处理后再插入到数据表中去。对于 function(函数)和 callback(回调方法)理论是一样的,只不过一个是表示填充内容所写的是函数名,另一个
31、是表示填充内容是类中的方法名。函数可以是 PHP5 内置函数或你自己所写的函数。而 callback 是当前模型类所能调用的一个方法。有关数据填充方面的详细资料,请参看官方使用手册 ThinkPHP 数据操作指南2 打开 Myapp/Tpl/default/Index/index.html 文件,我们修改代码将 form 写进去 $title标题:邮箱:内容:在上面代码中,我们简单地建了一个 form 表单,并将标题统一使用一个模板变量$title。action 提交到的处理地址是_URL_/add,其中_URL_是一个常量定义,表示当前模块地址,TP 模板引擎会自动将这句解释为/index.
32、php/Index/add,常见的模板使用的常量有 _ROOT_ 网站根目录地址_APP_ 当前项目(入口文件)地址_URL_ 当前模块地址_ACTION_ 当前操作地址_SELF_ 当前 URL 地址3 设置模板变量 $title ,增加 add 操作方法打开 Myapp/Lib/Action/IndexAction.class.php 文件,修改代码如下 assign(title,添加数据);/这里设置了模板变量$title$this-display();/ 处理表单数据的方法function add() $Form = D(“Form“);if($Form-create() $Form-
33、add();$this-redirect();elseheader(“Content-Type:text/html; charset=utf-8“);exit($Form-getError(). 返 回 );/类定义 end?代码知识要点:模板变量赋值前面的章节已介绍过。这里就啰嗦了。我们来看看 add 方法的代码。$Form = D(“Form“);这里使用了 TP 的特色单字母函数 D,是操作数据库时最常用的 TP 函数,表示实例化 Form 对象,即$Form = new FormModel();D 函数的具体代码可以查看ThinkPHP 目录内的 common/function.php
34、 中的片段,它会自动引入 Model 类,并判断之前如果实例化过这个 Model,就不再实例化,若然该 Model 不存在,就会抛出异常错误,另外,D 可以跨项目访问 Model,暂且忽略。$Form-create()使用 Model 类的 Create 方法创建一个 Form 对象,失败会返回 false。$Form-add(); /add 方法会将表单数据进行写入$this-redirect(); /执行跳转就这么简单几行代码,便完成了对数据插入的处理。现在我们可以尝试一下在表单中输入数据进行提交试试了。基于本学习系列 1-4 过渡到本节的补充说明 说明 1 从这节开始,TP 或 dev
35、这两个简称指的都是 ThinkPHP 1.6 版,可以到svn 下载。http:/ 下载后删除原来的 ThinkPHP 框架文件,将 dev 同样命名为 ThinkPHP,并仍是放置于网站的根目录下。另外,为了方便需要时可以对实例截图而不引起读者你误解,基于我的网站目录结构,现将 Myapp 的 index.php 位置更改到 Myapp 文件夹下(不再是原来的根目录).步 1:将根目录中的原 index.php 剪切并粘贴到 Myapp 文件夹下。更改代码为: run();?代码补充注释:代码中项目名称其实是可以不必定义的,系统会自动根据当前的目录名定义名称。步 2: 将.htaccess
36、文件复制一份粘贴到 Myapp 目录下。步 3: 将 Cache 目录,Temp 目录,Data 目录清空。说明 2 第五节中对于 URL 访问的默认模式在 dev 版默认配置中,dispatch 即 URL 调度功能是关闭的,所以在默认模式下,要访问 Index 模块的 index 操作,地址应是:index.php?m=index并且,也只有开启了此功能后,URL_MODEL 的设置才会有效。(在上面的章节我们提及过,可以设置 URL_MODEL 为 2 来使用 rewrite 功能去除显示 index.php)所以,现在我们的 config.php 代码是 mysql, / 使用的数据库
37、是 mysqlDB_HOST=localhost,DB_NAME=myapp,/ 数据库名DB_USER=root,DB_PWD=123456,/ 填写你连接数据库的密码DB_PORT=3306,DB_PREFIX=think_, / 数据表表名的前缀 请参看http:/ true,URL_MODEL=2,TMPL_VAR_IDENTIFY=array,/ 模板变量识别 留空自动判断 array 数组 obj 对象DEBUG_MODE=true,/开启调试模式);?代码补充注释:此节之后的内容会涉及到模板输出及数据操作,所以在这里明确设置了模板变量为数组,并开启 TP 的调试模式。注意 3:第
38、六节 CURD 知识之一 C(创建)中的自动填充dev 版的自动填充功能已移到 AdvModel 类中。要使用此功能,我们需要在Myapp/Lib/Model 类文件中引入该类.那么再来看看我们所定义的数据表 form 的字段: id,/自动编号title,/标题content,/内容create_time,/创建时间update_time/更新时间email,/邮箱status,/状态引用 tdweb 手记: 如果需要新建数据时自动填入时间戳,只需要设置数据表字段名“create_time“,如果需要修改时自动保存时间戳,那么设置数据表字段名为“update_time“。如果你的数据表字段名
39、不是默认的,那么需要指定,例如protected $autoCreateTimestamps = ctime;protected $autoUpdateTimestamps = utime;故此,让我们打开 Myapp/Lib/Model/FormModel.class.php 文件,将代码更改为如下: 代码补充注释:注意:dev 版的填充条件改为 1 新增 2 更新 3 包含 1 和 2,默认为新增。所以定义更方便了.而使用 ADD | UPDATE | ALL 会无效的(TO 流年大哥:TP 代码还有一个特色就是函数或方法的命名很符合语言使用习惯,原来的add,update,all 很直观
40、,易记,可惜没了)array(field,填充内容,填充条件,附加规则,额外参数)alias_import($alias,$classfile=)快速定义和别名导入这是新增的函数,我尝试注解一下,不正确请指正。该函数可以动态设置文件列表导入和直接导入文件,常会用到的文件别名有 Page 分页类 Page.class.php,ViewModel 视图模型类 ViewModel.class.php,AdvModel 高级模型类 AdvModel.class.php,RelationModel 关联模型类 RelationModel.class.php,当要引入已定义别名的文件,我们只要直接在参数中
41、传递别名就行了。别名可以自行在 ThinkPHP/Common/alias.php 中扩充。除了使用已定义的别名外,也可以使用动态指定。 alias_import(zzg,APP_PATH./Lib/ORG/zzg.php);或一次引入多个文件 $ailias=array(Abc= APP_PATH./Lib/ORG/abc.php,Efg = APP_PATH./Lib/Other/efg.php,);alias_import($ailias);注:指定文件或别名不存在时会返回 false类似的函数还有import($class,$baseUrl = ,$ext=.class.php)由于性
42、能问题,这个方式以后不再支持这是 ThinkPHP 内建的类库和文件导入的一个函数,具有缓存和检测机制,相同的文件不会重复导入,冲突时会提示错误。使用这方法时,系统会自动识别导入类库文件的位置:Think 代表 TP 框架基类库 即 ThinkPHP/Lib/Think 目录ORG 代表第三方公共类库 即 ThinkPHP/Lib/ORG 目录 代表当前项目类库,例如 Import(“.Action.xxxAction“) -即Myapp/Lib/Action/xxxAction.class.php指的是当前项目名称,这和使用Import(“Myapp.Action.xxxAction“)是一
43、样的。TP 的约定是 Think、ORG 等导入的是以系统(TP)基类库为相对起始目录,否则就认为是项目(Myapp)应用类库为起始目录。注意 1 使用时要注意文件名的大小写注意 2 Import 会自动将.转换为/,如果文件名中含有.,则要将.改为#才能正常导入。注意 3 导入的类文件后缀默认是.class.php2 第三方框架类库导入:vendor($class,$baseUrl = ,$ext=.php),起始目录统一是 ThinkPHP/Vendor 默认后缀是.php 注:vendor 也使用了 Import 函数。因此.说明 3,原来的模板文件 index.html 保持不变,因为
44、我们已启用了DISPATCH_ON 开关。仅将 Myapp/Lib/Action/IndexAction.class.php 代码更改如下 select(); /也可以 D(“Form“)-findAll()dump ( $Form );/ 输出查询结果$this-assign(title,添加数据);/定义标题的模板变量$this-display();/ 渲染模板/ 插入数据function add()header(“Content-Type:text/html; charset=utf-8“);/为了提示时不乱码$Form = D(Form);/实例化 Form 模型$vo = $Form
45、-create();/创建数据对象if(false = $vo) exit($Form-getError(). 返 回 );$rs = $Form-add();/插入数据if ($rs) redirect(/Myapp/,2,数据添加成功!);elseexit($Form-getError(). 返 回 );/类定义 end?代码补充解释:select($options=array();为了方便查看数据,index 操作中使用到了一个基本查询方法 select()方法代替了之前比较流行的 findAll(),不传任何参数则是获取全部数据。我们仍是循序渐进,具体关于查询的方法会在用到的时候陆续一
46、起学习。dump($var, $echo=true,$label=null, $strict=true)函数。浏览器友好的变量输出。当只有一个$var 参数时,会直接打印这个$var。dump($Form);会输出类似 array(1) 0 = array(7) “id“ = string(1) “1“title“ = string(18) “这是测试数据“content“ = string(4) “dfdf“create_time“ = string(10) “1212724876“update_time“ = string(1) “0“status“ = string(1) “1“email“ = string(12) ““也可以设置参数dump($要输出的变量, 是否直接打印 0 或 1,变量说明 , 是否以正规数组形式0,1)例如: dump($Form,1,Form 数据,0);输出类似 Form 数据 Array(0 = Array(id = 1title = 这是测试数据content = dfdfcreate_time = 1212724876update_time = 0