TP 5.0 架构 简介

TP 5.0 架构 简介


thinkphp 5.0 为API开发而设计的的高性能框架,是与以往thinkphp5.0如下版本大不相同的新型框架,病对以颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减小了依赖,实现了真正的惰性加载,支持composer,并针对API开发作了大量的优化,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构(所以没法直接从3.0版本直接升级,同时用过laravel的同窗能够发现,tp5.0不少方面都与它类似,极大地提高了开发者的开发效率)


安装
  • 第一种很传统的方式,官网下载框架代码,直接运行在web目录中便可
  • 第二种 安装好composer, 经过composer命令下载(tp5.0 支持composer依赖管理工具,在 Windows 中,你须要下载并运行 Composer-Setup.exe 或者访问composer中文网] ,运用composer命令开发就更加方便)
composer create-project topthink/think=5.0.* tp5  --prefer-dist
  • 第三种 经过git 经过代码仓库clone 框架代码便可

首先克隆下载应用项目仓库php

git clone https://github.com/top-think/think tp5

而后切换到tp5目录下面,再克隆核心框架仓库:css

git clone https://github.com/top-think/framework thinkphp

浏览器中输入访问地址(tp5与laravel5.6相同,项目访问目录为/public)前端

http://localhost/tp5/public/

目录结构总览(截至tp5文档)
project  应用部署目录
├─application           应用目录(可设置)
│  ├─common             公共模块目录(可更改)
│  ├─index              模块目录(可更改)一个典型的应用是由多个模块组成的,这些模块一般都是应用目录下面的一个子目录,每一个模块都有本身独立的配置文件、公共文件和类库文件。
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录(5.0的控制器类比较灵活,能够无需继承任何基础类库,控制器主要负责请求的接收,并调用相关的模型处理,并最终经过视图输出。严格来讲,控制器不该该过多的介入业务逻辑处理)
│  │  ├─model           模型目录(型类一般完成实际的业务逻辑和数据封装,并返回和格式无关的数据,模型类并不必定要访问数据库,并且在5.0的架构设计中,只有进行实际的数据库查询操做的时候,才会进行数据库的链接,是真正的惰性链接)
│  │  ├─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                 命令行入口文件

生命周期
  1. 入口文件:用户发起的请求都会通过应用的入口文件,一般是 public/index.php文件;thinkphp5.0采用的单一入口模式进行项目部署和访问,每一个应用都有一个统一的但不必定惟一(你也能够更改或者增长新的入口文件)的入口;入口文件位置的设计是为了让应用部署更安全,public目录为web可访问目录,其余的文件均可以放到非WEB访问目录下面;入口文件主要完成:定义框架路径、项目路径(可选),定义系统相关常量(可选),载入框架入口文件(必须)。
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
  1. 引导文件:依次执行下面操做 ,加载系统常量定义;加载环境变量定义文件;注册自动加载机制;注册错误和异常处理机制;加载惯例配置文件;执行应用;laravel

  2. 注册自动加载:系统会调用 Loader::register()方法注册自动加载,在这一步完成后,全部符合规范的类库(包括Composer依赖加载的第三方类库)都将自动加载git

  3. 注册错误和异常机制
  4. 应用初始化
  5. URL访问检测
  6. 路由检测
  7. 分发请求:在完成了URL检测和路由检测以后,路由器会分发请求到对应的路由地址,这也是应用请求的生命周期中最重要的一个环节。在这一步骤中,完成应用的业务逻辑及数据返回。
  8. 响应输出:控制器的全部操做方法都是return返回而不是直接输出,系统会调用Response::send方法将最终的应用返回的数据输出到页面或者客户端,并自动转换成default_return_type参数配置的格式。因此,应用执行的数据输出只须要返回一个正常的PHP数据便可。
  9. 应用结束github


URL

在没有开启路由时,访问路由的方式以下:web

http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操做/[参数名/参数值...]

>php.exe index.php(或者其它应用入口文件) 模块/控制器/操做/[参数名/参数值...]

URL大小写thinkphp

默认状况,url不区分大小写,也就是说URL里面的模块/控制器/操做名会自动转换为小写,控制器在最后调用的时候会转换为驼峰法处理。数据库

// URL不区分大小写状况下,若是要访问驼峰法的控制器类,则须要使用:
http://localhost/index.php/Index/blog_test/read

// 模块名和操做名会直接转换为小写处理。

若是但愿URL访问严格区分大小写,能够在应用配置文件中设置:apache

// 关闭URL中控制器和操做名的自动转换
'url_convert'    =>  false,


//一旦关闭自动转换,URL地址中的控制器名就变成大小写敏感了,例如前面的访问地址就要写成:

http://localhost/index.php/Index/BlogTest/read
//可是下面的URL访问依然是有效的:

http://localhost/index.php/Index/blog_test/read
//下面的URL访问则无效:

http://localhost/index.php/Index/blogtest/read

//须要注意:路由规则中定义的路由地址是按照控制器名的实际名称定义(区分大小写)。

API
  1. 新版的控制器输出采用Response类统一处理,而不是直接在控制器中进行输出,经过设置default_return_type或者动态设置不一样类型的Response输出就能够自动进行数据转换处理
'default_return_type'=>'json'

// 方法中直接return 便可

public function index()
{
    $data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];
    return ['data'=>$data,'code'=>1,'message'=>'操做完成'];
}

// 返回前端数据则为:
{"data":{"name":"thinkphp","url":"thinkphp.cn"},"code":1,"message":"\u64cd\u4f5c\u5b8c\u6210"}
  1. 明确指定输出类型的方式输出
// 若是须要指定数据类型返回则只须要再控制器中修改对应类型便可(核心支持的数据类型包括view、xml、json和jsonp,其余类型的须要本身扩展。),以下:

 public function index()
{
    $data = ['name'=>'thinkphp','url'=>'thinkphp.cn'];
    // 指定json数据输出
    // return json(['data'=>$data,'code'=>1,'message'=>'操做完成']);
    // 指定xml数据输出
    return xml(['data'=>$data,'code'=>1,'message'=>'操做完成']);
}

错误调试

因为API开发不方便在客户端进行开发调试,但ThinkPHP5的Trace调试功能支持Socket在内的方式,能够实现远程的开发调试。

'app_trace' => true,
'trace'     => [
    'type'             => 'socket', 
    // socket服务器
    'host'             => 'slog.thinkphp.cn',
],
相关文章
相关标签/搜索