ThinkPHP框架-1
1. 框架技术概述
1.1 框架为我们带来了什么?
A. 以MVC规划了我们的项目,每种程序都有自己固定的存放位置,升级维护时,能够非常容易的找到对应的程序。
B. 框架中提供了大量的函数和类库。简化开发。
C. 多人协作。
D. 节约培训成本和开发成本。
E. 公司在技术上不再依赖某个大牛。
劣势:
A. 增加了学习成本。
B. 相对于php和html混编代码来讲,框架的执行效率会低一点。
1.2 主流框架介绍
Yii : 美籍华人薛强开发的框架。
laraval : 类似于Linux的开源思想。
CI: 国外的轻量级框架。
Zendframework:zend公司开发的重量级框架。
ThinkPHP: 国产框架。
1.3 ThinkPHP框架介绍
A. 相对于其他框架来讲,TP框架比较容易上手。
B. TP框架功能比较强大,能够满足大多数项目的需求。
C. 应用范围广。
D. 有中文的讨论区和技术支持社区。
1.4 下载
官网: www.thinkphp.cn
下载:
下载ThinkPHP的核心版
下载ThinkPHP的完整版
完整版比核心版多了很多额外的功能,例如:完整版支持smarty模板引擎,还有验证类、文件上传类等扩展类。
1.5 TP的目录结构
ThinkPHP:是ThinkPHP的核心目录
Index.php: 项目的入口文件。(自己编写)
进入ThinkPHP之后:
Common:通用目录,存放了ThinkPHP最核心的底层函数
Conf: 配置目录,存放了配置文件
Lang: 语言包。
Library: 库,ThinkPHP最核心的程序存放位置。
Tpl: 模板处理程序目录。
ThinkPHP.php:ThinkPHP的核心文件,项目中必须引入该文件。
1.6 项目部署
将ThinkPHP的核心目录复制到项目目录中。
编写index.php唯一入口文件:
访问测试:
看到如下界面,则说明部署成功。
再来观察tp(项目)目录
Application:TP自动创建的目录,我们自己编写的项目程序都必须放在该目录下。
Application目录结构:
第一层:oa 项目根目录
第二层:
Application: 应用程序目录,我么自己编写的MVC程序都存放在该目录下
ThinkPHP: ThinkPHP的核心目录
Public: 存放js、css、image的目录
Index.php: 唯一入口文件
第三层:
Admin/Home: 程序的前后台
Common: 存放项目的配置文件和公共函数的目录
Runtime: 运行时目录,存放缓存文件和日志文件。
第四层:
Home/Admin:
Controller : 控制器程序存放目录
Model: 模型程序存放目录
View: 视图程序存放目录
Conf: 当前模块配置文件存放目录
Common: 当前模块可使用的函数程序存放目录
Common:
Common: 前后台(Home/Admin)都可以使用函数存放目录
Conf: 前后台(Home/Admin)都可以使用配置文件存放目录
Runtime:
Cache: 控制器和模板编译后的缓存文件
Data: 数据表缓存文件存放目录
Logs: 日志文件目录
Temp: 缓存文件存放目录
问题:如何学习TP框架?
1) URL访问模式。
2) 控制器的写法。
3) 视图的写法。
4) 模型的写法。
5) 扩展类的用法。
2. URL访问模式和控制器
2.1 URL解析
TP的核心思想: 从URL中接收要实例化的控制器的名称和对应的方法名称。在唯一入口文件中进行实例化,并且调用对应的方法。
TP的全URL:localhost/tp/index.php?m=Home&c=Index&a=index
修改上图的index方法,再访问localhost/tp/index.php?m=Home&c=Index&a=index
访问结果:
2.2 控制器的基本写法
存放位置: application/Home(Admiin)/Controller
文件命名: 控制器名称+Controller.class.php 例如:IndexController.class.php
TestController.class.php
控制器内部编写规则: 三步
1) 声明当前控制器的命名空间
2) 引入控制器的基类
3) 编写控制器的具体内容,需要继承Controller.class.php的基类
案例1) : 在Home模块下,创建一个Goods控制器,并编写add和index两个方法。
① 在Home/Controller 下创建GoodsController.class.php文件
② 声明命名空间
③ 引入控制器基类
④ 编写控制器内容,并集成控制器基类
访问测试:
案例2): 在Admin模块下,创建User控制器,编写一个index方法
访问测试:
2.3 命名空间
在PHP中,不允许常量、方法、类重名。 一旦重名会报一个“致命错误”。
在项目越做越大的情况下,类、方法、常量重名,经常会出现重名的情况。
访问结果:
解决该问题的方法:
1) 使用后缀
2) 使用命名空间
使用命名空间的方法:
① 为类、常量、方法,定义命名空间
② 在使用类的时候,引入命名空间;或者使用 \空间名\类名
改写控制器,使用从根空间开始指定空间路径的方式继承控制器基类
在TP中使用自动加载技术,可以自动引入Controller.class.php基类。
2.4 调试模式和生产模式
调试模式: 在开发过程当中使用的模式,可以显示比较详细的错误信息。
生产模式: 在项目上线之后使用的模式,有统一的错误信息。
测试:
开启调试模式:
再次访问:
在开发阶段,必须开启调试模式。
关闭调试模式的方法:
2.5 默认访问
Localhost/tp/index.php
http://localhost/tp/index.php?m=Home&c=Index&a=index
设置默认访问的内容:
修改默认访问项:
再次访问:
每个目录下都有一个index.html文件,该文件的作用是什么?
防止用户直接访问目录结构。
2.6 配置文件
在TP项目中一共有三/四个配置文件:
惯例配置: ThinkPHP/Conf/convention.php
项目配置: application/Common/conf/config.php
模块配置: application/Admin(Home)/Conf/config.php
影响范围: 惯例配置 >项目配置 > 模块配置
优先级: 模块配置 >项目配置 > 惯例配置
建议:不要直接修改惯例配置。修改项目配置或者模块配置均可。
案例:调整默认访问的控制器方法。
2.7 URL访问模式
TP中有4种访问模式:
1) 普通模式: localhost/index.php?m=Home&c=Index&a=index
缺点: URL地址中显示的内容过多,安全性比较差
2) pathinfo模式: localhost/index.php/Home/Index/index
优点:简化了URL地址,在一定程度上也能混淆地址的原意。
3) rewrite模式: localhost/Home/Index/index
优点:将URL地址以目录结构的形式展示出来。
以静态化形式显示,有利于SEO。
使用rewrite模式需要进行2步操作:
① 在apache中开启rewrite模块, 修改apache配置文件(httpd.conf)
② 将源码包中的.htaccess文件复制到项目的根目录
再次测试:看到正常结果
4) 兼容模式: localhost/tp/index.php?s=/Home/Index/index
某些古老的主机或者apache没有开启pathinfo支持,所以pathinfo和rewrite模式都不能使用。 只能使用兼容模式。
主要使用的两种方式: pathinfo(默认模式)、rewrite模式(个人更建议大家使用)。
如何来设置使用哪种模式?
// 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE 模式); 3 (兼容模式) 默认为PATHINFO 模式
设置默认访问模式为2
测试:在设置了 URL_MODEL之后,4种访问模式,依然都能够使用。
URL_MODEL的目标并不是限制只能使用哪种访问模式。
主要目标是和U方法配合来输出URL地址。
U方法的使用方式:
① 在控制器中使用:
访问结果:
② 在视图中的使用方式。在后面叙述。
案例:U方法和URL_MODEL配合显示地址:
显示结果:
URL_MODEL => 2
.html后缀是哪来的?
修改配置项:
3. 视图--TP内置模板引擎
3.1 什么是视图
用户最终能够看到页面就是视图。
3.2 创建视图
在控制器中使用display方法调用视图。
Display方法是Controller基类当中定义的好的方法。
测试:
保存位置:application/Admin(Home)/View/控制器名/
文件名称:和方法同名。
案例1) 在Viewtest控制器中,index方法调用视图
创建视图文件:
在Home/view/下创建Viewtest目录。
访问结果:
案例2) 在Admin/User/add调用视图
在Admin/View 下创建User目录
再在User目录下创建index.html文件
访问结果:
3.3 控制器中调用视图
Display方法:
① $this->display() : 不给任何参数是,就会调用和控制器方法同名的视图文件
② $this->display(‘add’) : 调用当前控制器下add方法所对应的视图。
③ $this->display(‘Index/index’) :调用Index控制器下的index方法所对应的视图
④ $this->display(‘Admin@User/index’) :调用Admin模块下,User控制器中index方法对应的视图
Fetch方法: 获取视图文件中的内容,但是不输出
Fetch方法和display方法对比:
Display方法比fetch方法多的功能就是进行输出。
3.4 模板替换
在视图文件中使用css、js、image。
测试:
结果:
使用__PUBLIC__ 替换模板中css的路径:
在add.html视图中引入css样式:
3.5 模板注释
TP模板注释方式:
① 单行注释:
② 多行注释: