第二课 TinkPHP5框架
2.1 初识框架
2.1.1 为什么要用框架
在实际的开发中会有一个成型的开发流程:

若在项目开发流程中不使用框架的话,会产生哪些问题?
(1).代码风格不一致,维护困难,可能会造成项目生命周期短;
(2).一小处的地方,会牵扯很多地方的修改;
(3).在后期满足客户需求方面(功能扩展)存在局限;
(4).时间原因,很多模块都已经开发完成,能够节省时间;
2.1.2 框架是什么?
(1).它是一堆代码的集合;
(2).它是一个半成品的应用;
(3).它包含了一些优秀的设计模式;
定义:框架是一堆包含了常量、方法和类等的代码集合,它是一个半成品应用,只包含了一些项目开发的时候所使用的底层架构,并不包含业务逻辑,框架还包含了一些优秀的设计模式,例如单例、工厂、建造者模式等。
2.1.3 框架的优点
(1).使用框架会帮助我们简单、快捷、高效的开发项目;
(2).可以让我们有更多的时间专注于业务逻辑的开发,不需要关注底层架构
(3).便于处理多人协助开发中遇到的问题
2.1.4 开发中用到主流的框架
(1).Zend Framework
是重量级框架,是php语言公司出品的官方框架,但是由于官方的考虑的功能比较全面,导致比较臃肿,启动慢。
(2).YII
是重量级框架,是美国华人开发的框架,作者名叫薛强(英文名Qiang),中文称之为“易框架”,最大的特点就是将代码的重用性发挥到了极致。目前YII框架在外企用的还是比较多的。
(3).Symfony :重量级框架,一款国外框架。
(4).Laravel:重量级框架,一款国外框架。
(5).Codelgniter :轻量级框架,简称CI框架,一款国外框架。
(6).ThinkPHP
是一款国人开发的框架,目前有中文的社区、中文官网、中文帮助文档等。在国内使用的还是比较普遍的。因为其有一系列中文支持,所以比较适合作为入门级框架学习。
(7).C框架(yaf、yaf)
2.2 编程中设计模式——MVC模式
2.2.1 MVC的概念
MVC是一种设计模式。它是强制将用户的输入、逻辑、输出相分离,将整个项目分为3个部分即模型层(Model)、视图层(View)、控制层(Controller)

2.2.2 项目编程中所经历的编程阶段
(1).混编阶段
特点:就是将PHP和HTML代码写在一个文件中
优点:效率高
缺点:不易于维护,会造成一个前端人员不得不去面对后端的代码,后端人员不得不去面对前端代码
(2).模板引擎阶段
特点:模板引擎典型的如smarty
优点:将前端的输出和后端的逻辑代码想相分离
缺点:效率比第一种低
(3).MVC设计阶段
优点:就是强制用户将输入、逻辑、输出相分离,在维护上简单性提高了很多。
缺点:效率比前两种模式都很低
2.3 TinkPHP5框架(一)之初体验
学习看完了上面章节的,那么咱们已经对什么是框架和MVC设计模式已经有了大概的了解。那么从本章节开始学习令人激动的TinkPHP5框架了。
2.3.1 TinkPHP5简介
thinkPHP V5.0是一个为API开发而设计的高性能框架——是一个颠覆和重构版本,采用全新的架构思想,引入了很多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载, 支持composer,并针对API开发做了大量的优化。 ThinkPHP5是一个全新的里程碑版本, 包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构,不适合原有3.2项目的升级。
2.3.2 TinkPHP5.0下载安装
1.第一种下载方法:
(1).打开网址:http://www.thinkphp.cn
(2).选中你要下载的版本(这里我下载的是:TP5.0.20完整版)
(3).等待下载

(4).下载完成

2.第二种下载方法
请看《第一课 初识Composer》的1.11章节
3.TinkPHP的安装
(1).将刚才已经下载好的解压到PHP的集成运行环境的文件夹中,这里我是XMAPP

(2).开始解压

(3).解压结束,这是TP5.0.20的文件目录
(4).将解压好的ThinkPHP文件,移动到PHP的集成环境下,并重命名。

(5).验证安装是否成功,输入地址:http://127.0.0.1/TP/public/,如出现如下图即表明框架安装成功

到这里我们学习了相关TP5.0框架的下载安装的方法。
2.4 TinkPHP5框架(二)之TP框架文件目录结构
下载最新版框架后,解压缩到web目录下面,可以看到初始的目
录结构如下:
project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
│ ├─static 静态资源存放目录(css,js,image)
│ ├─index.php 应用入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于 apache 的重写
├─runtime 应用的运行时目录(可写,可设置)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架系统目录
│ ├─lang 语言包目录
│ ├─library 框架核心类库目录
│ │ ├─think Think 类库包目录
│ │ └─traits 系统 Traits 目录
│ ├─tpl 系统模板目录
│ ├─.htaccess 用于 apache 的重写
│ ├─.travis.yml CI 定义文件
│ ├─base.php 基础定义文件
│ ├─composer.json composer 定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 惯例配置文件
│ ├─helper.php 助手函数文件(可选)
│ ├─LICENSE.txt 授权说明文件
│ ├─phpunit.xml 单元测试配置文件
│ ├─README.md README 文件
│ └─start.php 框架引导文件
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
2.4.1 application目录结构图
application目录是应用目录,我们整个应用所有的内容都写在这个目录中,在后续开发中,我们更多的时候都是在编写这个目录中的文件。在它里边有一个index文件夹,它叫做模块儿,叫做Index模块儿,在它里边有一个controlller文件夹,它就是我们模块儿的控制层,在我们写代码的时候,我们还会在里边创建model和view文件夹,这样就组成了这个Index模块儿的MVC(controller控制层,model模型层,view视图层)

Application文件夹目录图
2.4.1.1 command.php 文件
command.php是控制台的配置文件,当我们用命令行执行thinkphp的时候,它会读取command.php的配置
2.4.1.2 common.php 文件
common.php它是项目的公共文件,当我们编写一些通用函数的时候,比如我们写一个函数,想在所有的模块儿中都能调用,那么我们就可以把函数写在改文件中,它就可以注册到全局,在任何地方都可以调用
2.4.1.3 config.php 文件
config.php它是应用的配置文件,整个用用都读取这个配置,也就是admin模块儿和index模块儿会通用这个配置
2.4.1.4 database.php 文件
database.php它是数据库配置文件,如果我们需要连接数据库,那么我们只需要修改database.php的配置就可以了
2.4.1.5 route.php 文件
route.php它是路由文件,当我们想对URL进行美化,那么我们就可以修改此文件,对其增加一些路由配置,就可以达到美化的效果
2.4.1.6 tags.php 文件
tags.php它是应用行为扩展文件,在thinkphp中,它为我们埋下了很多钩子,我们可以对框架进行扩展,而不需要修改框架本身的源码,我们需要在某一个钩子上注册某些函数,或者是注册某些行为,来通过行为来改变框架的执行流程
2.4.2 extend目录结构图
这个目录是我们下载第三方库时候使用的,当然我们不是通过composer来下载的,比如说我们有一个第三方库,我们用着比较好用,但是它没有composer包,我们就可以将类库下载到extend目录,之后我们修改一下命名空间,就可以直接在我们的应用中使用
extend目录结构图
2.4.3 public目录结构图
我们网站的根目录,也就是说我们网站根目录下所有的这些文件都是允许访问的

public目录结构图
2.4.3.1 static目录
主要用来放静态文件,比如说css,js,图片等等
2.4.3.2 index.php文件
index.php文件是整个网站或整个应用的入口文件,所有的请求都会经过index.php之后再去转发
2.4.3.3 robots.txt文件
robots.txt文件是搜索引擎爬虫文件,它主要是给搜索引擎看的,我们可以在这里定义某些链接或某些URL可以被搜索引擎爬取,某些不允许让搜索引擎爬取,比如我们后台的所有的URL链接是不希望搜索引擎爬取的,而前台我们一般需要。
2.4.3.4 router.php文件
它是框架快速启动的测试文件,比如你本地没有安装Apache,只安装了PHP,那么我们可以同过,PHP内置的workserver来启动,通过这个文件,我们就可以启动这个框架
2.4.4 runtime目录结构图
它是网站运行中的缓存文件,它包括日志,缓存和编译文件等等。

runtime目录结构图
2.4.5 thinkphp目录结构图
它是框架文件,也就是说thinkphp5的框架都在里边

thinkphp目录结构图
2.4.5.1 base.php文件
base.php是定义一些常量
2.4.5.2 composer.json文件
composer.json它是定义composer的配置文件
2.4.5.3 console.php文件
console.php它是控制台的入口文件
2.4.5.4 convention.php文件
convention.php是框架默认的控制文件
2.4.5.5 helper.php文件
helper.php是助手函数
2.4.5.6 lang文件夹
lang这里边是语言包
2.4.5.7 library文件夹
library目录是框架的核心,它里边有think(它是整个框架的核心文件)和traits(它是类库的扩展)两个目录
2.4.5.8 LICENSE.txt文件
LICENSE.txt是说明文件
2.4.5.9 start.php文件
start.php是框架启动文件
2.4.5.10 tpl目录结构图
tpl目录,是我们框架默认的一些模板

tpl目录结构图
default_index.tpl 它是我们自动生成的控制器模板文件
dispatch_jump.tpl它是我们网站发出成功或失败的中间跳转文件
page_trace.tpl它是我们调试时显示的模板文件
think_exception.tpl它是我们抛出异常时页面展示的文件
2.4.6 vendor目录结构图
vendor目录是composer安装过程中生成的目录,通过composer安装的所有类库都被安装在了这个目录中
vendor目录结构图
2.5 TinkPHP5框架(三)之认识框架入口文件index.php
如下图,该文件是框架的入口文件,该文件内有两个文件:
// 定义应用目录 define('APP_PATH', __DIR__ . '/../application/'); // 加载框架引导文件 require __DIR__ . '/../thinkphp/start.php';

2.5.1 application文件路径
在该应用路径中,主要要调用的是index文件下的controller文件夹下的Index类,在该类中主要执行的就是index方法。
2.5.2 start.php文件
该文件是框架启动文件,会自动加载thinkphp框架中的base.php文件,base文件中包含了框架中的基本类和配置文件。在这里我就不一一介绍了。

base.php文件图
2.6 TinkPHP5框架(四)之模块控制器
我们找到index模块的Index控制器(文件位于application/index/controller/Index.php 注意大小写),我们把Index控制器类index方法修改为Hello World!!
.

访问方式:ThinkPHP采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块、控制器和
操作,下面是一个标准的URL访问格式:
目的:入口文件位置的设计是为了让应用部署更安全, public 目录为web可访问目录,其他的文件都可以放到非WEB访问目录下面。
2.7 TinkPHP5框架(五)之模板引入加载方式
官方给的引入加载方式:
当前模块/view/当前控制器名(小写)/当前操作(小写).html
表示系统会按照默认规则自动定位模板文件,这是默认控制器中的加载方式;
例子:
1.我们首先在application文件夹的index文件下创建view文件夹


2.再此文件夹创建一个index文件夹下,

3.在index文件下创建一个view.html文件

4.在index文件夹的controller文件夹下的Index类文件,添加一个view()助手函数

5.验证

2.7.1 模板存放的位置
放在模块的view目录下并且每个控制器的模板,要在与控制器同名的目录下.
以 index.php/admin/index/index
则对应的模板在 /admin/view/index/index
2.7.2 叫法
模板名和方法名是一致的例:
地址栏: index.php/admin/index/index
对应控制器: admin/index
对应的方法: index
对应的模板: admin/view/index/index.html
2.7.3 如何加载
通过助手函数view,或者通过继承父类控制器Controller当中的fetch方法加载

模板文件的写法支持下面几种:

助手函数调用格式:

助手函数使用相对来说是比较方便
2.7.4 注入模板变量及使用


2.8 TinkPHP5框架(六)之控制器的使用
2.8.1 url如何调用控制器
例子:http://localhost/thinkphp5.1/public/index.php/index/index/index
格式:http://域名/项目名/web目录/入口文件/模块名称/控制器方法/index方法
访问的index模块下的controller文件夹下的index()方法即index.php/模块名称/控制器/方法如果需要传递其他参数,可以如下写index.php/模块/控制器/方法/id/3
2.8.2 控制器存放位置
每一个模块都有自己的控制器,放在模块的controller目录下
2.8.3 控制器类叫什么?继承自谁?命名空间叫什么?
控制器类:类名和文件名一致,首字母大写
继承: \Think\Controller
顶级的空间:app
2.8.3 控制器模块的设计
Tp5版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间

2.8.3.1 为什么需要多模块
通常在一个网站项目当中并不是只有一个模块,可能分为前台模块、后台模块、以及Api模块
如果在写一个网站的时候,admin目录就可以做我们的后台,index就可以作为我们的前台,我们还可以做更细致的拆分,比如再创建一个购物车模块,用户中心模块等。
注意:有一个比较特殊的模块,叫common,故名思意,这个模块是一个公共的模块
创建好此模块当我们在浏览器中访问该页面时,我们发现报错,在thinkphp5.1这个版本会提示模块不存在
这个是ThinkPHP5默认的一个规定,在整个项目中有很多模块是通用的一些方法,我们需要有一个地方来放置,ThinkPHP默认将common做成一个通用模块,它不允许我们直接在URL上直接访问该模块。那么我们又如何来访问我们的那个index方法呢?
我们只需要在对应的模块 引入命名空间
2.8.3.2 关于禁用访问模块
有了common这样一个模块,它足够安全,它不允许我们直接在url中直接访问,同时减少了不必要的重复代码的编写,只允许开发者使用,不允许用户访问
2.8 TinkPHP5框架(七)之初识模型
2.8.1 放在哪儿?
项目/模块/Model目录下
admin模块的Model /admin/model/目录下
2.8.2 model类文件叫什么?
一般model名称与表名table 相同如Product.php 则对应Product表
注意: 虽然Model类首字母大写的,但惯例,表名一律小写.
2.8.3继承谁?
namespace app\admin\model;
use think\Model;
class Products extends Model
{
}
2.8.4 在controller里如何实例化
模型支持实例化调用和静态调用
2.8.4.1 use引入命名空间
一般来说,我们会事先使用use引入模型类,就不需要每次都使用完整命名空间方式来调用Products 模型类了。
Products::get(1);
或者使用 model助手函数
model('products')->get(1)
注意:
其实我们都还没有配置数据库信息,所以数据库信息,在哪配置

2.9 TinkPHP5框架(八)之开发规范
1.目录使用小写+下划线的方式命名
2.所有的类库函数文件名均以.php结尾(在TP3.2版本中,我们定义控制器的时候是.class.php,但是TP要求是以.php结尾)
3.类的文件名均以命名空间定义,且命名空间和类库文件所在的路径一致,看下边的图片

4.类文件采用驼峰首字母大写 其余文件为小写+下划线命名,比如
其余的普通文件,比如配置文件等,都是小写

5.函数名采用驼峰命名,首字母小写,如(getUserInfo())
6.属性名采用驼峰命名,首字母小写,如(tableName)
7.以双下划线__开头的函数或方法为魔术方法
8.常量以大写字母和下划线命名,比如

9.配置参数是以小写字母和下划线命名,比如配置文件中

10.表和字段采用小写+下划线的命名方式,不能以下划线开头
11.应用类库的命名空间统一为app(可以配置)

浙公网安备 33010602011771号