下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录一、1、2、3、4、5、二、1、2、3、4、5、6、7、8、9、三、1、2、3、4、5、6、7、8、9、简介33框架3MVC3获取并布署4快速入门4控制器9控制器9定义控制器9URL 调度模式10空操作12空模块13项目分组14URL 大小写15页面跳转15页面重定向16视图17视图17定义模板17分隔符17模板赋值18模板输出19模板替换19获取内容20模板注释21变量输出2110、11、12、13、14、15、16、17、18、19、20、系统变量22使用函数23默认值23运算符23内置24包含文件24导入文件26volist26foreach28if、elseif、else28使用代
2、码29四、模型30模型30定义模型30配置数据库信息311、2、3、4、5、6、7、8、9、10、实例化31CURD 操作32定义字段33创建数据35字段37表名操作38事务处理39一、简介1、它是一个框架它是一个基于 MVC 的框架2、框架框架,即 framework。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统。使用框架的好处:代码重用合理分工解决多人协作开发问题常见的框架:Zend FrameworkYiiSymfonyCgniter3、MVCMVC 是施乐PARC)在八十年代为编程语言 Smalltalk80 发明的一种软(Xerox件设计模式,至今已被广泛使用。M
3、VC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用 MVC 应用程序被分成三个 M:M V:View:模型、视图、控制器。模型视图C:Control控制器4、 获取并布署h3.0直接部署到项目中5.25.05.23.0开发项目流程:创建项目创建文件配置项目 创建控制器创建模型 创建模板运行调试,调优部署到生产环境5、 快速入门1) 解压Exles:案例:tp 框架的源代码2) 创建项目,并将 tp 放入到项目中编写项目文件(index.)信息运行项目,看到以下界面观察项目目录,会自动产生一些项目文件可以在任何位置为任何目录创建项目,只需要改变相关目录常量的定义即可。3) 如
4、果你的目录结构与上题中的相同,相关常量的定义可以省略4) 创建出来的项目目录项目公共文件目录项目配置目录项目语言包目录项目类库目录 项目模板目录 项目运行时目录包含常用信息的定义、常用函数的定义、数据文件的缓存CommonConf Lang Lib TplRuntime:常用函数和常量的定义runtime.5) 框架文件执行过程可以看出,如果是第一次执行,或者开启了调试模式,程序会自动加载框架内的 runtime 文件,否则,会加载项目的 runtime 文件6) 关于调试模式如果开启调试模式,不会产生项目的 runtime 文件runtime.文件保存了项目中的一些常量定义、常用函数的定义,
5、但是一个项目在开发的过程中,数据表结构、路径有可能会经常变量,如果有runtime.,那么可能不能即时看到变化。所以,建议:开发时,开启调试模式布署时,关闭调试模式7) 配置虚拟主机8) 为什么可以看到上面这个界面文件/模块名/动作名它执行了默认的模块下的默认的方法将 tp 默认的配置的配置文件中:它执行了 Index 模块的 index 方法。打开 index 控制器:9) 创建商品模块的添加方法在 Lib 下创建控制器及方法:时:10)为 add 方法添加模板在 tpl 目录下创建 Goods 文件夹,表示所有Goods 模块下的模板所在路径运行:二、控制器1、控制器控制器接受用户的输入并
6、调用模型和视图去完成用户的需求。2、 定义控制器Lib/ActionclaserAction extendionpublic function add()$this-display();3、 URL 调度模式url 调度模式就是指在 tp 中页面 url 的方式在 tp 中,调度模式共有四种,可以通过配置选项:URL_MDOEL 来设置0:普通模式 1:pathinfo 模式 2:rewrite 模式 3:兼容模式1) 普通模式语法: HYPERLINK http:/项目/ http:/项目/文件?g=分组名&m=模块名&a=动作名g:分组名 m:模块名 a:动作名2) pathinfo 模式
7、这种也是 tp使用的模式,也是默认的语法: HYPERLINK http:/项目/ http:/项目/文件/分组名/模块名/动作名3) rewrite 模式语法: HYPERLINK http:/项目/分组名/模块名/动作名 http:/项目/分组名/模块名/动作名httpd.conf 配置文件中加载了 mod_rewrite.so 模块AllowOverride None 将 None 改为 All确保 URL_M设置为 2把下面的内容保存为.htac RewriteEngine ons 文件放到文件的同级目录下RewriteCond %REQUEST_FILENAME !-dRewrite
8、Cond %REQUEST_FILENAME !-fRewriteRule (.*)$ index./$1 QSA,PT,L4) 兼容模式有些 web 服务器可能不支持 pathinfo 模式,但还想使用,可以考虑使用这个模式语法: HYPERLINK http:/项目/ http:/项目/文件?s=/分组名/模块名/动作名:在的 url 中,可以自己指定分隔符URL_PATHINFO_DEPRh/index./Admin,Goods,add4、 空操作空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,可以实现错误页面和一些 URL 的优化。语
9、法:_empty($name)Goodion.class.实现 url 的优化:运行时:5、 空模块空模块的概念是指当系统找不到指定的模块名称的时候, 系统会尝试定位空模块(EmptyAction),利用这个机制可以用来定制错误页面和进行 URL 的优化。语法:classEmptyActionextendMODULE_NAMEion订制错误页面:EmptyAction.class.实现 URL 优化:注意:空模块中的常量MODULE_NAME 表示请求的当前的不存在的模块名6、 项目分组前台博客会员商品模块前台商品模块商品信息的浏览商品模块商品信息的在项目,如果需要分组,修改 config.配
10、置文件,添加以下两个选项即可:config.:分组列表:默认分组APP_GROUP_LISTDEFAULT_GROUP配置完分组信息后:要对控制器目录与模板目录进行分组控制器分组:模板分组:7、 URL 大小写如果想时,url 不区分大小写,可以修改配置文件:config.URL_CASE_INSENSITIVE=true时:8、 页面跳转:作成功后调用的方法:操作失败后调用的方法sucserror在配置文件中,有两个选项用于控制以上两个方法所使用的模板config.TMPL_ACTION_SUCTMPL_ACTION_ERRORSMemberAction.class.9、 页面重定向redi
11、rect$this-redirect(“goods/show”, array(id=2), 5, “页面跳转中”);参数 1:要跳转的 url参数 2:传递的参数参数 3:停留秒数 参数 4:提示信息MemberAction.class.三、视图1、视图视图就是用户看到的并与之交互的界面在 tp 中,视图包含两部分:视图类模板2、 定义模板默认的模板文件定义规则:模板目录/分组名/模块名/操作名+模板后缀在配置文件中,下面这个选项用户有设置模板后缀TMPL_TEMPLATE_SUFFIX3、 分隔符TMPL_L_DELIM=,$name4、 模板赋值assign($name,$value);$
12、name:模板变量名$value:要赋值的模板变量的值Goodion.class.模板:在 tp 视图中,有这样一个功能,可以向模板直接分配一个数组变量,然后数组中的元素名就是模板变量名,元素的值就是模板变量的值模板:运行:5、 模板输出$this-display();display();$this-display();调用与当前操作同名的模板display(操作名)$this-display(add);调用当前模块下的 add.html 模板display(模块名:操作名)$this-display(“Category:show”); 调用 Category 模块下的 show.html 模
13、板display(show,utf-8, text/xml);参数 1:模板参数 2:编码参数 3:输出的内容类型Content-Type:text/xml6、 模板替换在 TP 的模板中,有一些模板字符串常量,当执行时,会自动被成为一些路径: PUBLIC :当前的公共目录 APP : 当前项目的 URL 地址 GROUP :当前分组的 URL 地址 URL : 当前模块的 URL 地址 ACTION :当前操作的 URL 地址css 代码:运行:同时,在配置文件中,可以加入选项:TMPL_PARSE_STRING修改 config.Goods/add.html运行:7、 获取内容$this
14、-fetch();fetch替换返回display替换输出8、 模板注释语法:/* 注释内容/ 注释内容多行注释单行注释*/ html 注释会通过 http 响应给客户端注释不会响应给客户端(它是服务器端解释)9、 变量输出语法:$name在 tp 可,向模板中赋值变量共有三种:普通变量$name数组变量$productname、$对象变量$obj:name、$obj:say()CategoryAction.class.模板:运行:10、系统变量在 tp 的模板中,有以下内置的系统变量:$_SERVER:$_GET$Think.server$Think.get:$_$Think.tT:$_RE
15、QUEST:$_:$_SES:获取 tp 配置文件中的信息$Think.request$Think.$Think.ses$Think.config运行:11、使用函数语法:$name|fn1|fn2=arg1,arg2,# 运行:12、默认值当一个变量的值为空时,会执行默认值语法:$变量|default=默认值模板:运行:13、运算符+-*/%+-$a+$b$a-b$a*$b$a/$b$a%$b$a+ 或+$a$a- 或 -$a在 tp 中的模板里,可以直接使用运算符对变量进行数算运行:14、内置$name语法:tp 中的内置共分两种:开放闭合15、包含文件语法:index.html:在 in
16、clude中,可以使用这种语法:运行:include在模板时,也可以传递参数过去:运行:16、导入文件导入文件是指对资源文件的导入,指css、js 文件语法:file(必须):资源文件type(可选):资源文件类型,取值:js 和css默认为 js起始路径是的Public 目录采用命名空间方式以前的引入方式:现在的引入方式:17、volistvolist用于数组语法:$vo.id$name:要的数组变量名id:将到的变量放在指定的变量中offset: 要输出数据的 offsetlength: 输出数据的长度,需要指定 offsetkey:循环索引默认值:i从 1 开始模板:控制器:运行结果18
17、、foreachforeach 语句用于遍历数组语法:$vo.id$name:要遍历的数组名item:每次遍历到的数组元素运行:foreach 与 volist 相比,没有其余的属性19、if、elseif、else对于简单的逻辑判断语句,建议使用 if语法:value1 value2value3eq 或者 equal:等于neq 或者 notequal:不等于 gt:大于egt:大于等于 lt:小于elt:小于等于 heq:恒等于 nheq:不恒等于运行结果:20、使用代码在 tp 的模板中,可以使用以下标记编写代码:1)2)echo “o”;echo “think”; ?在配置文件中,有一
18、个选项,模板中是否可以使用TMPL_DENY_:在配置文件中,将以上选项设置为 true,表示可以禁上上面的第二种写法,但是第一种写法还是支持的。四、模型1、模型模型表示企业数据和业务规则2、 定义模型模型文件:Lib/M表名(首字母大写)+M.class.class 表名(首字母大写)Mextends M数据库有哪些数据表,就有哪些模型,每个数据表都会对应一个模型创建分类模型:接下来,尝试对模型进行实例化:运行:在 tp 中,实例化模型对象之前,必须要配置数据库相关信息,也就是说,创建模型对时,tp 会自动创建与数据库服务器的连接3、 配置数据库信息打开 tp 框架的配置文件,将其中的数据库
19、配置信息到的项目配置文件中:数据库类型:服务器地址:用户名:DB_TYPEDB_HOST DB_USER DB_PWDDB_NAME :数据库名称 DB_PREFIX :表前缀 DB_PORT :端口 DB_CHARSET:数据编码重新运行上题:说明配置信息正确!4、 实例化在 tp 中,模型共分两种:自定义模型实例化自定义模型快速实例化自定义模型基础模型(M)实例化基础模型快速实例化基础模型1) 实例化用户自定义模型2) 快速实例化用户自定义模型3) 实例化基础模型4) 快速实例化基础模型5、 CURD 操作创建操作(Create)数据(Read)更新数据(Update)删除数据(Delet
20、e)6、 定义字段1)在 tp 里,一共有四种实例化方式,不管是哪种实例化形式,当实例化对象时,这时,tp会自动创建与数据库的联接,并模型对应的数据表可以看出,无论是子类模型还是基础模型都会自动实现对表结构的2)字段缓存字段缓存保存在 Runtime/Data/_fields/ 目录下面只要是不开启调试模式都会生成字段缓存(字段缓存可以单独设置关闭)。可以通过设置 DB_FIELDS_CACHE 参数来关闭字段自动缓存开发时,由于数据表结构可能不确定,建议关闭字段缓存功能运行时,可以看出,每次都对对应的数据表结构进行可以在模型类里面手动定义数据表字段的名称,可以避免 IO 加载的效率开销,在模
21、型类里面添加 fields 属性即可3) 定义字段的语法protected $fields=array(id,username, password, _pk=id, _autoinc=true);CategoryM.class.实例化对象后:可以看出,定义字段列表后,对象创建时,不会表表结构,而直接使用定义的字段列注意:字段列表的定义是在用户自定义类中,所以当实例化基础模型类时,是不会使用定义的列表,而是再次表结构。7、 创建数据可以帮助你快速地创建数据对象,最典型的应用就是自动根据表单数据创建数据对象,这个优势在一个数据表的字段非常之多的情况下尤其明显。语法:$m-create();分析 c
22、reate 方法执行过程:create 方法的参数 data 是默认参数首先判断 data 参数是否为空,如果为空,将$_T 超全局变量数组中的数据赋值给参数 data然后,再将$data 的值进行其它设置,再将数据赋值给$vo,最后将 vo 变量的值赋值给当前模型对象的 data 属性中,其中,data 属性是一个数组分析 add 方法执行:add 方法的参数是默认参数,所以参数 data 为空调用完 create 方法后,直接调用 add 方法并没有传参数,下面继续判断,如果当前对象的 data 属性数组不为空,所以会将当前对象的 data 属性数组中的值赋值给参数 data,便于下面代码
23、的录入通过以上代码分析:create 方法的本质就是从一个数组中创建数据假如表单以 get 形式提交数据,还想使用自动创建功能,怎么写?$m-create($_GET);也就是说:下面代码是成立的问题:创建的表单中的元素名称必须要与数据表字段相同,但会在客户端源文件显露数据表结构。如果不同,这个字段的值就会丢失,如何解决这个问题?8、 字段的字段创建表单对象的功能功能可以让你在表单中隐藏真正的数据表字段,而不用担心放弃自动语法:protected $_map = array(namepwd= username,= uswd);定义数组,数组元素是假名,数组的值是真名CategoryM.clas
24、s.CategoryAction.class.分析字段原理:经过分析,可以看出,type 参数的取值为:0 或 1如果是 0:会将数组中的假名元素全部移除,保留真名元素如果是 1:会将数组中的真名元素全部移除,保留假名元素9、 表名操作1)在一个数据库中,如果部署了多个项目,那么可以使用表前缀解决问题DB_PREFIX =think_2)在的模型里面,有两个关于数据表名称的属性定义:当你的表表前缀符合要求,但表名与模型类名不一致,这时使用 tableName当你的表表前缀不符合要求,或没有表前缀,这时使用 trueTableName10、事务处理语法:/开启事务/提交事务/回滚事务$User-
25、startTrans();$User-commit() ;$User-rollback() ;11、AR 模式AR:ActiveRecord将数据表将数据表字段到类到属性将数据到对象1) AR 模式写程序,强调封装性,将公有属性修改为私有成员属性:改为私有之后,之前程序不能使用,不能在类外直接使用私有成员属性。但这样一来,属性很多的情况下,需要定义很多方法,过于麻烦: set($name,$value) get($name)当对一个不存在或不可的属性进行操作时,会自动执行 set 或 get2) TP 中的 AR 模式CategoryM.class.使用的对象直接调用了如:id、name、co
26、ntent、cid 这些属性,但子类模型与父类模型并没有定义这样的属性,如何理解?3) 分析:分析以上源码:当用 AR 模式为模型对象赋值或取值时,其实是因为子类模型继承父类 M,父类中定义魔术方法 set 与 get set 在工作时,其实是向当前对象的 data 属性数组中添加一个新的元素,元素名以属性名命名 get 在工作时,其实是从当前对象的 data 属性数组中获取同名的元素add 方法首先判断参数 data 是否为空,如果为空,继续判断当前对象的 data 属性数组是否不为空,然后将当前对象的 data 属性赋值给 data 参数变量 $data=$this-data下面在增删改查
27、时直接到 data 变量中取值即可。12、联贯操作1) 语法:$m-方法 1()-方法 2()-方法 n()-select();支持联贯操作的方法主要有:指定查询条件:排序:查询指定的条数:指定查询的字段名称:分组查询whereorder limit field group以上方法的最后必须连接 select()查询方法,前面的方法顺序没有要求2) 案例13、统计查询1)语法:$m-统计查询方法();:统计行数:最大数:最小数:平均数:求和countmax min avg sum2) 代码示例五、实用项1、 设置 trace 信息在配置文件中,添加以下选项:true:开启 trace 功能2、
28、 ses使用 ses之前,必须开启 ses机制在 tp 中,ses机制默认是开启的在 config.文件中:tp 中的 ses相关方法:创建 ses获取 ses并赋值的值ses(name,value);$value = ses(name);清空指定的 ses清空所有 ses 判断指定的 ses的值的值是否设置sesses ses(name,null);(null); (?name);代码示例:3、创建创建获取指定的删除指定的删除所有的(name,value);(name,value,3600);并设置它的有效时间的值$value =(name);(name,null);(null);/4、 文
29、件载入1) 载入函数文件(1)mon.在项目的 Common 目录创建,创建 common. Common 目录文件comm.控制器:必须创建的文件名:common. common.时,tp 才会自动加载,如果是其它,不会自动加载,只有文件名为:common.文件中创建的函数会被编译到runtime.文件中,下次执行时直接执行runtime.文件中的函数,所以如果函数发生改变,不会直接看到效果。(2)config.LOAD_EXT_FILE=“user”在 Common 目录下创建文件,保存自己的函数,文件名任意指定但这个文件不会被自动加载,所以需要在配置文件 config.中,加入选项:可以看出,这样的文件的函数不会被编译到 runtime.文件中,如果修改函数内容,可以即时看到效果。(3)Common/ushp以上两种做法,都是 tp 对文件实行自动加载,但是在很多时候,某一个页面是用不到这么多的方法,比较浪费资源,需要让程序在需要的时候再去加载函数文件。在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 帮扶协作协议书
- 尚德机构协议书
- 库房租货协议书
- 高中生对生涯规划教育课程案例开发研究课题报告教学研究课题报告
- 钢铁厂炼钢工人绩效考核表
- 2026年人力资源部年度绩效考核总结
- 2026年生物科技公司研发工程师面试题集
- 2026年信贷分析师面试题及答案
- 2026年风险总监的绩效评估与考核方法
- 2026年网络安全公司技术专员选聘及面试问题集
- 2025年四川单招试题及答案普高
- 建设工程工程量清单计价标准(2024版)
- 学堂在线 雨课堂 学堂云 生活、艺术与时尚:中国服饰七千年 期末考试答案
- DB14∕T 3069-2024 放射治疗模拟定位技术规范
- 硬笔书法全册教案共20课时
- 心搏骤停护理常规
- 中盐集团招聘试题及答案
- 产前筛查标本采集与管理制度
- 石家庄市得力化工有限公司5万吨-年煤焦油加工生产装置安全设施设计诊断专篇
- 急危重症护理培训心得
- 2025劳动合同书(上海市人力资源和社会保障局监制)
评论
0/150
提交评论