ThinkPHP框架介绍及项⽬部署
⼀、介绍
1、什么是框架?
·特征1:是⼀堆代码的集合;
·特征2:⼀个半成品的应⽤;
·特征3:包含了⼀些优秀的设计模式;
定义:框架是⼀堆包含了常量、⽅法和类等代码的集合,它是⼀个半成品的应⽤,只包含了⼀些项⽬开发的时候所使⽤的底层架构,并不包含业务逻辑,框架还包含了⼀些优秀设计模式,如单例模式、⼯⼚模式、AR(Active Record)模式等。
2、为什么要使⽤框架?
在以后实际开发的时候会有⼀个成型的开发流程:
如果在上述的流程中不使⽤框架进⾏开发会遇到哪些问题?
·代码风格不⼀样,维护困难,可能会造成项⽬⽣命周期短;
·⼀处⼩的修改,会牵扯出很多地⽅的修改;
·在后期满⾜客户需求⽅⾯(功能扩展)存在局限性;
3、使⽤框架的好处
·使⽤框架会帮助我们简单、快捷、⾼效的开发项⽬;
·可以让我们有更多的时间专注于业务逻辑的开发,不需要关注底层架构;
·便于处理多⼈协助开发中遇到的问题;
4、市⾯上常见的框架
·Zend Framework
是重量级框架,是php语⾔公司出品的官⽅框架,但是由于官⽅的考虑的功能⽐较全⾯,导致⽐较臃肿,启动慢。
·YII
是重量级框架,是美国华⼈开发的框架,作者名叫薛强(英⽂名Qiang),中⽂称之为“易框架”,最⼤的特点就是将代码的重⽤性发挥到了极致。⽬前YII框架在外企⽤的还是⽐较多的。
·Symfony
重量级框架,⼀款国外框架。
·Laravel
轻量级框架,⼀款国外框架。
·Codelgniter
轻量级框架,简称CI框架,代码⽕焰/⽕焰代码,⼀款国外框架。
·ThinkPHP
是⼀款国⼈开发的框架,⽬前有中⽂的社区、中⽂官⽹、中⽂帮助⽂档等。在国内使⽤的还是⽐较普遍的。因为其有⼀系列中⽂⽀持,所以⽐较适合作为⼊门级框架学习。
·…
5、MVC
5.1、什么是MVC
MVC是⼀个设计模式。它是强制将⽤户的输⼊、逻辑、输出相分离,将整个项⽬分为三个部分:控制器(C)、模型(M)、视图(V)。
5.2、在编程中所经历的编程阶段
在整个编程开发的历史中,⼀共是经历了三个阶段:
第⼀阶段:混合编程阶段
通俗的说就是我们常说的“混编”模式。
特点:就是将php代码和html代码写在⼀个⽂件中
优点:效率⾼。
缺点:不易于维护,会造成⼀个前端⼈员不得不⾯对后端的代码,后端⼈员不得不⾯对前端代码。
第⼆阶段:模版引擎阶段
模版引擎典型的如smarty。
优点:将前端的输出和后端的逻辑代码想相分离。
缺点:效率⽐第⼀种低。
第三阶段:MVC设计阶段
优点:就是强制将⽤户的输⼊、逻辑、输出相分离,在维护上简单性提⾼了很多。
缺点:效率⽐前⾯2种模式都低。
⽬前最新版本的ThinkPHP是v5.0,⽬前使⽤的⽐较多的ThinkPHP3.2.3。点击【更多】可以查看到ThinkPHP的历史版本:
扩展(了解):关于软件版本的修饰词
Alpha版本:内测版本,内部测试。
Beta版本:公测版本,⾯向⽤户,由⽤户去bug。
RC版本:候选版本,软件在这个阶段就已经不会有太多的功能性调整,主要是排错。
R版本:release版本,发⾏版本,稳定的版本。
下载完成之后会得到⼀个zip压缩包:
3、⽂件结构
Application⽬录下:
ThinkPHP⽬录下:
Conf⽬录下:
补充:
在ThinkPHP中除了这个convention.php配置⽂件之外,还有其他的配置⽂件,但是convention.php这个⽂件是系统级别的配置⽂件,还有⼀个是应⽤级别的配置⽂件,最后还有⼀个分组级别的配置⽂件。
从作⽤范围上来说:
系统 > 应⽤ >分组
从优先级上说:
分组 > 应⽤ >系统
Library⽬录下:
Think⽬录下:
4、部署(重点)
第⼀步:创建站点⽬录
第⼆步:配置Apache虚拟主机的配置⽂件,创建⼀个虚拟主机
⽂件位于Apache⽬录下conf/f
将之前的⼀段站点配置代码复制粘贴出⼀段:
第三步:重启Apache
第四步:修改hosts⽂件,将配置⽂件中声明的2个域名做下绑定(解析)
问题:hosts⽂件在哪?
可以通过在【运⾏】中输⼊【drivers】打开⽬录,然后选择etc⽬录。
可以在cmd中通过ping命令测试域名是否绑定成功:
第五步:将代码⽂件复制到站点⽬录中去
在ThinkPHP压缩包⽬录中复制ThinkPHP⽬录和index.php⼊⼝⽂件到站点根⽬录中:
复制:
通过浏览器进⾏访问:
Application⽬录(此处的Application⽬录和压缩包中不⼀样,⾥⾯还包含了三个⽬录):
Home⽬录下:、
说明:在⾸次运⾏index.php⼊⼝⽂件的时候才会去产⽣对应的⽬录结构。再次运⾏不会产⽣变化。
5、细节问题
5.1、⾃动⽣成
在⾸次运⾏index.php⼊⼝⽂件的时候会产⽣相应的⽬录结构,⽬录的名字取决于在index.php中定义的常量APP_PATH。
5.2、⽬录安全⽂件
在⾃动⽣成的⽂件夹中都有⼀个空⽩的html⽂件,⽂件名叫做index.html,这个⽂件我们称之为⽬录安全⽂件。其作⽤:
在Apache的配置⽂件中有options +indexes,默认展⽰站点⽬录,如果在站点⽬录中不存在index开头的⽂件,则会展⽰⽬录结构,但是有了index.html(⽬录安全⽂件)之后就不会展⽰结构了。
⼀句话概括就是防⽌列出站点的⽂件结构。
5.3、⽂件⽣成
当我们⾸次运⾏⼊⼝⽂件的时候发现在磁盘中系统给我们⽣成了⼀些⽬录,那这些⽬录是如何⽣成的?
⽂件夹/⽂件的⽣成主要取决于ThinkPHP的系统流程:
5.4、默认访问
在部署之后访问会看到⼀个笑脸,笑脸是怎么输出的?
默认分组/平台:Home
默认控制器:Index
默认⽅法:index
上述的默认值,可以在系统配置⽂件中到:
分组也叫模块或者平台。
三、ThinkPHP中控制器
1、控制器创建
命名规则:控制名(英⽂⾸字母⼤写)+Controller关键词+.class.php
例如:创建商品控制器则可以写成GoodsController.class.php,⽤户控制器则写成UserController.class.php。
案例:在Home分组中创建⼀个⽤户控制器User控制器。
控制器结构代码:
总结步骤:
第⼀步:声明当前控制器(类)的命名空间;
第⼆步:引⼊⽗类控制器(类);
第三步:声明控制器(类)并且继承⽗类;
说明:命名空间
第⼀:命名空间是在php5.3版本中引⼊的⼀个概念,所以ThinkPHP3.2.3要求⼤于等于5.3版本的php。
第⼆:命名空间本⾝跟⽬录没有关系,但是在ThinkPHP中命名的声明和使⽤必须跟⽬录挂钩。
案例:参考上述结构代码的完善三步骤,来完善刚才创建的user控制器。
在类中编写⼀个测试⽅法,名字可以起叫test:
访问结果:
如果后期需要更多的控制器来实现功能,则只需要按照上述的创建步骤反复的创建更多需要的控制器就⾏。
问题:URL传递的任何东西都会在URL地址栏中显⽰出来,既不安全也不好看。
注意:该路由形式不能直接使⽤,需要配置完成才能使⽤。
配置步骤
第⼀步:需要修改Apache配置⽂件f,开启重写模块,去掉之前的注释符
第⼆步:需要修改虚拟主机配置⽂件,给需要开启重写的站点⽬录配置处添加allowoverride,并且值是all
第三步:如修改了Apache配置⽂件,则还需要重新启动Apache
第四步:将ThinkPHP压缩包中的.htaccess⽂件复制到⼊⼝⽂件的同级⽬录
注意:php⼀共拥有好⼏个运⾏模式,每个运⾏模式的使⽤.htaccess⽂件的⽅法可能不⼀样。
5、关于ThinkPHP中路由形式的配置
路由形式在ThinkPHP系统中的配置⽂件是有体现的,
特别说明:路由形式的配置值,不影响我们在地址栏中直接输⼊其他形式路由访问。该配置项的值影响的是ThinkPHP系统封装的URL组装函数(U函数)的⽣成url地址的形式。
五、分组
分组:⼀般的项⽬都会根据某个功能的使⽤对象来区分代码,这个时候放到⼀起之后会形成⼀个⽂件夹,这个⽂件夹就可以称之为分组。分组就是我们通常所指的平台(前台、后台)。
例如在刚部署好的ThinkPHP系统中Home⽬录就是⼀个分组⽬录。后期如果需要使⽤更多的分组,则需要⾃⼰去创建分组。
如何去创建分组?
步骤:参考Home分组的⽬录结构,重新创建⼀个新的⽬录,在其中依照Home中的结构,创建对应的⽬录即可。
第⼀步:创建⼀个分组的⽬录,⽬录与Home⽬录同级
第⼆步:创建Admin⽬录中的⽂件结构
分组创建好之后,可以在Admin分组中编写⼀个控制器,然后编写⽅法进⾏测试访问:
编写结构代码:
编写测试⽅法:
如果需要创建多个分组,参考以上的步骤,反复创建对应的⽬录结构就⾏。
六、控制器中的跳转
1、URL组装
Url组装就是根据某个规则,来组成⼀个url地址,这个功能就叫做url组装。
在ThinkPHP中,系统提供了⼀个封装的函数来处理url的组装,这个⽅法叫做U⽅法。
U⽅法是系统提供的快速⽅法,除了U⽅法这样⼤写字母的⽅法之外,还有⼀些其他的快速⽅法如:A、B、C、D、E、F、G、I、M、R、S。这些⽅法都定义在系统的函数库⽂件中(functions.php)
U语法格式:
U(‘URL路径’,参数数组);
例如:要使⽤U⽅法组装出当前控制器下index⽅法地址,则可以写成
U(‘index’);
再例如:使⽤U⽅法组装出另外⼀个控制器Index中的index的地址,则可以写成:
U(‘Index/index’);
如果需要给指定的页⾯添加参数,⽐如给Index控制器下的index⽅法传递⼀个id=100
php文件管理系统mvc 源码U(‘Index/index’,array(‘id’ => 100));
总结出⼀个通⽤的格式:
U(‘[分组名/控制器名/]⽅法名’,array(‘参数名1’ => 参数值1,’参数名2’ => 参数值2));
2、系统跳转⽅法
在ThinkPHP中系统有2个跳转⽅法,分别是成功跳转和失败跳转:
成功:
$this -> success(跳转提⽰,跳转地址,等待时间);
失败:
$this -> error(跳转提⽰,跳转地址,等待时间);
跳转提⽰参数必须要有,后⾯的地址和时间可以没有,如果没有指定跳转地址,则跳转到上⼀页。
在实际使⽤的时候,成功跳转会看到⼀个笑脸:
失败跳转会看到:
说明:上述案例中使⽤success和error⽅法在当前的控制器中并没有定义,其是⽗类控制器中已经定义好的⽅法,由于当前控制器继承了⽗类,所以可以直接使⽤。
七、ThinkPHP中的视图(重点)
1、什么是视图
视图就是MVC三⼤组成部分中V(View),主要是负责信息的输出和展⽰。
2、视图的创建
创建的位置需要是在分组⽬录下的View⽬录下与控制器同名的⽬录中。例如Test控制器中的login⽅法,需要有⼀个模版,则该模版⽂件login.html需要放到View/Test/login.html
例如:创建Test控制器的test⽅法模版
如果有多个模版⽂件,则按照上⾯的要求进⾏创建。
3、视图的展⽰
在smarty中展⽰模版使⽤的⽅法是display,在ThinkPHP中同样也是display⽅法。Display在ThinkPHP中的语法格式:
$this -> display(); 展⽰当前控制器下与当前请求⽅法名称⼀致的模版⽂件
$this -> display(‘模版⽂件名[不带后缀]’); 展⽰当前控制器下的指定模版⽂件
$this -> display(‘View⽬录下的⽬录名/模版⽂件名[不带后缀]’); 展⽰指定控制器⽬录下的指定模版⽂件
案例:
在Test控制器中的test⽅法中展⽰test.html
在Test控制器中的test1⽅法中展⽰test.html
在Test控制器中的test2⽅法展⽰View/Demo/test.html
4、变量分配(初阶)
在实际开发的时候不仅仅只是展⽰模版这么简单,往往还需要展⽰数据,这个时候变量还在控制器的⽅法中,需要将数据给传递到模版中并且展⽰,这个过程叫做变量分配。
在ThinkPHP中系统封装好了⼀个变量的分配⽅法,这个⽅法叫做assign。具体语法:
this−>assign(‘模版中变量名’,
php中的变量名);
说明:⼀般情况两个参数的变量都是⼀样的。
案例:在test控制器中的test⽅法中传递⼀个变量给test.html展⽰。
⽬前已经将var变量传递给了模版⽂件test.html,在模板⽂件中如何去展⽰数据?
在ThinkPHP中默认的展⽰基本变量⽅法如下:
{$模版中的变量名}
展⽰效果:
5、变量分隔符
在ThinkPHP中默认的变量左右分割符是{和},其是可以被更改的,可以在配置⽂件中到具体的配置项:
6、模版常量替换机制
在实际开发的时候会出现⼀个这样的问题:在引⼊图⽚、css、js⽂件的时候,往往需要写⼀些⽐较复杂的路径,所以这个时候我们⽐较希望能有⼀些特殊的常量将很长很复杂的路径简单化,这个时候可以考拉使⽤模版常量替换的机制。
在ThinkPHP中系统默认给我们提供以下⼏个常⽤的模版常量:
MODULE:表⽰从域名后⾯开始⼀直到分组名结束的路由
CONTROLLER:表⽰从域名后⾯开始⼀直到控制器结束的路由
ACTION:表⽰从域名后⾯开始⼀直到⽅法名结束的路由
PUBLIC:站点根⽬录下的Public⽬录的路由
SELF:表⽰从域名后⾯开始⼀直到路由的最后(如果没有参数,则__SELF__和__ACTION__所表达的内容是⼀样的)
具体的输出:
为什么上述的⼏个常量就可以表⽰上⾯输出的这些路由呢?
答:在ThinkPHP中“模版常量”是通过模版内容替换机制来实现的,并⾮是常量的定义。替换机制可以查看⾏为⽂件
ContentReplace.Behaviour.class.php
其模版常量的实现核⼼就是字符串的替换。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。