第二课 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(可以配置)

posted @ 2018-08-26 22:53  努力跟上大神的脚步  阅读(477)  评论(0)    收藏  举报