版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ThinkPHP课程目标:1、关于 mvc 和 tp 的简介2、快速入门3、学习 tp 中的各个组件( M 、V、C) 控制器模型视图4、实用项关于 MVC 和 TP 的简介:一、什么是框架框架,即 framework 。其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的 系统。二、为什么使用框架代码重用合理分工 解决多人协作开发问题三、主流的 php 框架Zend FrameworkYiiSymfonyCodelgniterThinkPHP四、什么是 MVCMVC 是施乐帕克研究中心 (Xerox PARC) 在八十年代为编程语言 Smalltalk 80 发明 的一种软件设计模式
2、,至今已被广泛使用。MVC 是一个设计模式, 它强制性的使应用程序的输入、 处理和输出分开。 使用 MVC 应用程序被分成三个核心部件:模型、视图、控制器。M : model模型表示企业数据和业务规则V: view视图是用户看到并与之交互的界面C: controller控制器接受用户的输入并调用模型和视图去完成用户的需求我们去吃饭,大堂经理问我们:客官来点什么? 我们:来地沟油!经理让服务员将我们带到包房经理将我们点的菜发给厨房厨房开始做菜,好了之后,通知经理经理让服务员将菜端给我们经理:控制器后厨:模型 菜:数据服务员:视图五、获取ThinkPHPhttp:/th in kphp.c n下载
3、 thinkphp3.0 直接部署到项目中php5.2所有tp版本要求php必须是5以上的,tp3中要求是5.2以上的快速入门 一、了解TP目录结构将下载的tp3.0压缩包进行解压,可看到两个夹:Examples :代码示例ThinkPHP :这是我们想用的框架程序我们需要将Thinkphp文件夹移动至我们的项目中,打开ThinkPHP文件夹,可以看到如下内容:UCEIS5E txt 文本丈档80 x 79FHG関愎ExtendB README, tit文本文档9 KBThi nkPHP.php框架入口文件Commo n框架公共文件目录Co nf框架配置文件目录Lang框架系统语言目录Lib系
4、统核心基类库目录Tpl系统模板目录Exte nd框架扩展目录、开发流程创建项目,并将 ThinkPHP获得 创建入口文件配置项目创建控制器创建模型(可以不存在自定义模型)创建模板运行调试,调优部署到生产环境、入口文件所有项目都是从入口文件开始的定义框架路径定义项目路径定义项目名称 载入框架入口文件四、第一个ThinkPHP项目1、创建项目2012,将thinkphp复制到我们网站的根路径下,在htdocs下创建index.php文件require(Thi nkPHP/Th in kPHP.php);THINK_PATHAPP_NAMEAPP_PATH在tp中,由于目录结构稍微复杂,所以在第一次
5、访问入口文件时,会帮助我们自动创建项目结构1 Q?php3定义thinkphp框架路径deflnef THIM_PATtt, ./ThinkPHP/);5定义项目茗称,需要和项目文杵夹茗称保持一致deFine( -APP hlfillE ,; 9定义项目路倒deflnefAPP MTIT . b ./2M2/);11包含即中的入口文件includ?( ThinhPHP/ThinkPHP .pr)p * );2运行路径:http:/localhost/index.php,可以看到如下界面,说明运行成功2、了解项目目录结构Com mon项目公共文件目录Co nf项目配置目录Lang项目语言包目录L
6、ib项目类库目录Tpl项目模板目录Run time项目运行时目录3、为什么输入地址之后,可以看到内容 http:/localhost/i ndex.php由于请求的是这个 url,如果没有写任何信息,表示请求Index模块的index动作也就是说:会自动请求 IndexAction这个类下的index方法为什么这样自动请求?DEFAULT_MODULE :默认的默认模块名DEFAULT_ACTION :默认的动作名这个是由于这两个配置选项来决定的在配置文件 Conf/config.php中添加如下内容:1,addl7);B这时会请求Stude ntActi on这个类下的add方法。4、我们按
7、照以上的结构开发项目,合适? ?不合适将thinkphp框架和入口文件index.php移动至我们的项目路径(2012)文件夹下这样做需要哪些改动? ?匚 omtn oiiConfRuntimeThinkPHP inde. phpPHF Include Fath+ 吕匚 FMF Language Libriry111213如果您的项目和上图目录结构相同,可以使用如下代码: 这样即可包含5中的入口文件include(1ThinkPHP/ThinkPHP . php 1 ):重新运行,重新初始化。5、开启调试define( APP_DEBUG ,true); require( ThinkPHP/T
8、hinkPHP.php );APP_DEBUG :表示开启调试功能功能:如果开启,则不产生 runtime.php这个编译文件 如果产生了错误,可以看到错误提示6、了解thinkphp的工作流程Thinkphp.php文件主要内容如下:!2:0 defined ( 1PP_PATH ) or define (1 iLPP_P ATH dirnane ( 5_SERVER 1 SCRIPT_F ILENAHE ) ) . V );辻1 djaritied ( 1 RUNTIME PATH ) 口r def ieft (1 RUNTIME_PATH1 , APP_PATHJ RuntimE? 1
9、) f|22 中,默认是关阖诡试的-i;:3djfif inaH1PF_DEBUGT orlftf 1ns ( APP_DEEDG raJ-St)j /是晉调式4 $runtiwe = defined (1 KODL_NAME 1 ) 7 1 - T str to Lower | NODE_DJkME) * M_runtiwe. php1 :1 -runtiwe. php1 ;IL5 djef med ( RUNTIME FILE ) Ct dtllilft ( RUNTIME FILE RUNTIHE PATH.;三一=牡!2 7 If (APP DEBUG & is rile (RUNTI
10、ME FILE) ) (I/部署模式頁接我入运行饉存-L:9retjuire RUNTIME JILE;j30 elee-C|siH亲統目录定义L 2def ined (p THINE PATH1) or define (THINK PATH1, ditJiame ( FILE )./;|33H丹载运存时女禅-归遇rrquire THINK PATH 11 CBirtnBiV 忙Utltph.p;|35 -定义了项目路径定义了运行时文件路径定义是否开启调试,默认是 false如果关闭调试模试并且运行时文件存在,就直接包含运行时文件否则定义tp框架的路径,并且包含 common下的运行时文件运行
11、时文件的功能? ?第一次运行时,会生产生运行时文件,这个运行时文件会保存一些系统常用设置和常用函数,这样一来,下次请求时,直接包含该运行时文件,可以避免系统开销运行时文件可能会造成延迟效果,在开发时,建议开启APP_DEBUG7、完善程序创建Index控制器的hello方法,显示相应模板创建Admin控制器创建Admin控制器的index方法,显示相应模板创建Admin控制器的hello方法,显示相应模板控制器一、什么是控制器控制器接受用户的输入并调用模型和视图去完成用户的需求。举个例子:http:/项目 /ndex.php/a 模块 lb 操作该请求是想请求a模块的b方法,也就是说,会调用a
12、模块的控制器的b方法我们需要在项目目录的action目录下,定义一个控制器文件,这个文件的命名规则如下:模块名(首字母大写)Action.class.php文件中的类的命名规则:Class 模块名(首字母大写)Action extends Action二、URL的调度模式Thinkphp默认支持的url是这种形式的:http:/项目 /index.php/ 模块/操作除此之外,还有哪些种url被支持在tp中,可以配置下面这个选项来使用相应的urlURL_MODEL= 1,URL_MODEL它的取值范围:共有 4种0 :普通模式1 :path info模式2 :Rewrite模式3 :兼容模式1
13、普通模式: http:/serverName/appName/i ndex.php?m=module&a=acti on&id=1m:模块名a:动做名URL MODEL = 2/设置为rewrite 模式表示请求参数 m指定的模块,请求这个模块下的a参数指定的方法,同时向这个方法传递一个参数为id,值为1 将url_model配置为0URL_MODEL = 0/设置url为普通模式2、path Info模式 (默认模认)http:/serverName/appName/i ndex.php/module/actio n/id/1/module :表示模块actio n :表示方法id/1 :传
14、递一个参数id,值为1URL_PATHINFO_DEPR :设置 url 分隔符URL_MODEL = 1,/ 设置 url 为 pathInfo 模式URL_PATHINFO_DEPR= -/ 设置 url 中的分隔符如果这样设置,可以这样访问:http:/localhost/2012/in dex.php/I ndex-hello-id-13、Rewrite 模式我们可以利用rewrite 模实现对入口文件的隐藏http:/serverName/appName/module/actio n/id/1/1 Mlpd corifSE置文件中力D载了med帥rites顒块N AllowOverr
15、ide None 1$None改为 All3. 确保URL_MODEL设置対24. 把下面的帛容保存为H/ess文件放到入口文件的同级目录下F?ewriieEngine onRewrheCond 豁REQUE轧FILENAME bdRewriteCcnd %REQUEST_FILENAME !-fRewriteRule %*)$ index.php41 QSA,PTpL|最终,可以使用下列这种URL进行访问,实现了对index.php入口文件的隐藏http:/localhost/2012/l ndex/hello4、兼容模式 http:/serverName/appName/?s=/modul
16、e/acti on/id/1/module :模块名actio n:动做名id :参数名1:参数值URL_MODEL = 3/设置为兼容模式三、定义控制器位置:Lib/Actionclass UserAct ion exte nds Acti onpublic function add()$this-display();2cIass User Act ion ext ends Action45_Lpublic function add()会目动加ftuser文件夹下的add.htrtil模板文件 /header(1 location1)thi3-display();G781011四、空操作空操
17、作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。_empty($ name)$name:请求的不存在的方法的名称怎样解决非法操作?当我们请求一个不存在的方法时,会自动定位到这个叫_empty的方法中,这个不存在的方法名会保存到参数$name中1)可以实现一些错误页面的处理功能2) 可以实现一些url的优化:在下面,我们将这个问题说清楚/我想查询北京、上海的所有会员信息?public fun cti onsearch。$city=$_GET city ;$city . echo select * from U
18、ser where city=我希望能实现这样的url优化: http:/localhost/2012/i ndex.php/User/sha nghaihttp:/localhost/2012/i ndex.php/User/beiji ngTP认为shanghai和beijing是一个方法名,会自动到 UserAction控制器下查 shanghai和bejing 方法,由于我们没有定义这两个方法,所以会自动执行_empty方法,所以这时$name参数it|17-2Q的值为shanghai或beijing,代码如下:puiblic function _empty(Sname)|echo ,
19、r3elcct 方 Xroin user where city=1 ,r. ;五、空模块空模块的概念是指当系统找不到指定的模块名称的时候,系统会尝试定位空模块 (EmptyAction),利用这个机制我们可以用来定制错误页面和进行URL的优化。EmptyActi onMODULE_NAME当请求不到指定的模块时,会自动去找EmptyAction这个类,如果这时 url中没有指定方法名,由于DEFAULT_ACTION=index,所以会自动使用这个类的index方法,我们可以在这个类中再定义一个_empty方法,这样一来,如果用户请求了不存在的模块和不存在方法名时, 会自动定位到这里1)关于错
20、误的处理2)实现一些url的优化我想实现这样的url:http:/localhost/i ndex.php/sha nghaiio ii12131415http:/localhost/i ndex.php/bej ingpublic function index()echo select 击 from Product where city= 1 . MODULE NkME . 1 rr;六、项目分组为什么进行项目分组? ?如:前台、后台、博客、商品我们认为:这可以分成四个项目,在tp可以做一些设置,将项目进行分组con fig.php 酉己置文件APP_GROUP_LIST :分组列表(有几个
21、组,在这里都需要列出,使用逗号分隔开)DEFAULT_GROUP :默认分组举个例子:我现在想将项冃分成两个组,前台和后台Home :前台Admin :后台Conf/config .php代码如下:111213APPGROUPLIST1defIult_gfoup! Honffip Admin1 * iHams 1要分成;两个组 獣认分组衙船映该如何设置分组目录:必须要做两个设置:1)对控制器进行分组2)对模板进行分组在Lib/Action目录下,创建两个文件夹,分别为:HomeAdmin这两个名字必须和分组名相同在Tpl/下,创建两个文件夹,分别为:HomeAdmin这两个名字必须和分组名相同
22、将之前的几个控制器文件放入到Admin文件夹下,表示它们都是后台项目的控制器,然后,输入url ;http:/localhost/2012/i ndex.php/Admi n/In dex/i ndexAdmin :表示分组名In dex :表示模块名In dex :表示动做名如:该问前台中的 product模块中的add操作,可以使用如下 url: http:/localhost/2012/in dex.php/Home/Product/add由于之前设置了默认分组名为Home,所以这个url也可以写成http:/localhost/2012/i ndex.php/Product/add最后
23、,在tpl下的各个项目文件夹创建相应的模块对应的模板,即可!七、URL大小写http:/localhost/2012/in dex.php/Admi n/In dex/hellohttp:/localhost/2012/i ndex.php/Admi n/in dex/hello以上两种URL都想表示访问同一个方法,但是由于tp中的url区分大小写,所以第二种方法会定位到index模块的hello方法上有时,我们希望 url中可以不区别大小写,可以使用如下设置:con fig.php酉己置文件URL_CASE_INSENSITIVE =true不区分大小写URL_CASE_INSENSITIVE= false ,/ 默认 false 表示 URL 区分大小写 true则表示不区分大小写八、前置后置操作有时我们希望执行方法之前和之后,各有一些额外的操作,这时可以考虑使用前置和后置操作_before_after_public function _before_ in dex()public function in dex()public function _after_ in dex()293 0313 233343 St13 6373 839
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度旅游纪念品档口租赁管理合同3篇
- 二零二五版临时建筑设施租赁与安装合同4篇
- 二零二五年度智慧酒店管理技术合作合同协议
- 二零二五年度流量套餐定制与售后服务合同4篇
- 2025年度商业论坛活动搭建安全评估与保障合同
- 二零二五年度商业广告位租赁合同解除申请书
- 二零二五年度郑州市劳动合同管理实施细则
- 二零二五年度油漆涂料行业技术交流会合同
- 2025年度销售员产品知识培训与销售技巧提升合同
- 二零二五版党政机关会议设备租赁及维护保养合同
- 高二物理竞赛霍尔效应 课件
- 金融数学-(南京大学)
- 基于核心素养下的英语写作能力的培养策略
- 现场安全文明施工考核评分表
- 亚什兰版胶衣操作指南
- 四年级上册数学教案 6.1口算除法 人教版
- DB32-T 3129-2016适合机械化作业的单体钢架塑料大棚 技术规范-(高清现行)
- 6.农业产值与增加值核算统计报表制度(2020年)
- 人工挖孔桩施工监测监控措施
- 供应商物料质量问题赔偿协议(终端)
- 物理人教版(2019)必修第二册5.2运动的合成与分解(共19张ppt)
评论
0/150
提交评论