TP6学习笔记一:安装与基本配置
1 说明与概述
1.1 说明
以下内容大部分来源于TP6完全开发手册,以手册为主附上个人理解,仅作学习使用.
1.2 概述
第一篇学习笔记,主要记录TP6的基础,包括TP6简介,安装,Hello World,目录结构,配置等.
2 TP6
TP是一个免费的开源的,快速的,简单的面向对象的轻量级的PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.TP遵循Apache2开源许可协议发布,意味着可以免费使用TP,甚至允许基于TP开发的应用开源或商业产品发布/销售.
3 TP6主要新特性
- 采用PHP7强类型(严格模式)
- 支持更多PSR规范
- 多应用支持
- ORM组件独立
- 改进的中间件机制
- 更强大和易用的查询
- 全新的事件系统
- 支持容器invoke回调
- 模板引擎组件独立
- 内部功能中间优化
- SESSION机制改进
- 缓存及日志支持多通道
- 引入Filesystem组件
- 对Swoole以及协程支持改进
- 对IDE更加友好
- 统一和精简大量用法
4 安装
4.1 安装要求
在安装TP6之前,需要先安装:
- PHP ( >= 7.1.0)
- Composer
4.2 Composer
4.2.1 Composer简介
Composer是PHP5.3以上用来管理依赖关系的工具,可以在自己的项目中声明所依赖的外部工具库,Composer会安装这些依赖的库文件.
4.2.2 Composer安装
Linux/Mac:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Windows:戳这里.
笔者的是win环境,以win为例:首先用上面的链接下载Composer-Setup.exe.

选择php.exe的位置.

这里笔者遇到的问题是firebird与oci这两个模块缺失的问题,解决方法戳这里.
.

好了之后会修改php.ini的默认配置,原来的会备份,next修改即可.

下一步是代理设置,不需要的直接next.


然后说提示Failed to decode zlib stream.

(如果没遇到这种问题直接使用exe安装成功的可以略过下面)
其实linux下这种问题是很容易解决的,编译安装zlib就是了,但是win下就有点麻烦了.于是搜了以下zlib在win下的安装方法,需要使用VS,下面是Github上的zlib资源:

可能这真的是一个"wrong place"...
好吧不废话了,笔者平时不需要用VS,为了一个zlib去下一个VS这怎么看也不划算.找了一下其他的安装方法,使用另一个文档安装(戳这里):


然后终于成功了:

4.2.3 (可选)换镜像
官方建议使用国内的阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
这是一种全局的修改配置文件的方式,还可以修改当前项目的配置文件,进入项目的根目录(composer.json所在的目录),执行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer
其实相比起全局就是少了一个-g.
上面的命令会在当前项目中的composer.json末尾添加镜像配置信息(当然可以直接手动添加):
"repositories":
{
"packagist":
{
"type":"composer",
"url":"https://packagist.phpcomposer.com"
}
}
4.2.4 安装TP6稳定版
cd切换到项目目录,
cd project
composer create-project topthink/think tp6
其中tp6就是应用根目录,可以随意修改.
如果之前已经安装过,可以切换到项目目录,使用以下命令更新:
composer update topthink/framework
(会删除thinkphp目录重新安装新版本)
4.2.5 安装TP6开发版
同样切换到项目目录:
cd project
composer create-project topthink/think=6.0.x-dev tp6
这里笔者用的是开发版,但是出现openssl错误:

在php.ini中把openssl扩展开启就行了.
然后会多一个叫tp6的文件夹.

4.2.6 调试模式
默认是部署模式,开发阶段可以修改APP_DEBUG开启调试模式.使用create-project安装的tp6默认会带一个.example.env的文件,默认已开启调试模式:

4.2.7 测试
php think run
提示:

浏览器输入:
http://localhost:8000

默认用的是8000端口,可以使用-p指定端口,比如80端口:
php think run -p 80
然后使用
http://localhost
访问.
5 规范
6 单应用模式与多应用模式
PHP支持多应用部署,实际目录结构取决于单应用还是多应用模式.
默认安装后的目录结构是单应用模式.多应用模式与单应用模式的主要不同就是app目录,多应用模式下面有多个应用目录,而单应用模式默认只有一个controller,而且官方建议多应用模式的话把controller删除,系统会根据该目录作为判断是否是单应用的依据.
7 目录结构
相对于TP5.1,TP6的主要变化是核心框架纳入vendor,原来的application变为app目录.
这里以单应用模式进行目录结构的说明,项目目录下(这个例子是上面安装的tp6目录)有8个子目录:app,config,extend,public,route,runtime,vendor,view.
7.1 app
app是应用目录,包含一个controller控制器目录(默认有一个Index.php)与以下php文件:
- AppService.php:应用服务类,包含服务注册与服务启动两个方法.
- BaseController.php:控制器基础类,包含验证初始化方法.
- common.php:应用公共文件,默认为空.
- event.php:事件定义文件.
- ExceptionHandle.php:应用异常处理类.包括记录与渲染方法.
- middleware.php:全局中间件定义文件,默认返回空.
- provider.php:容器provider定义文件.
- Request.php:应用请求对象类,继承于think\Request.
- service.php:系统服务定义文件,服务在完成全局初始化之后执行.
除此之外还有一个叫.htaccess的文件,这个也叫分布式配置文件,全称是Hypertext Access,提供了针对目录改变配置的方法,即在一个特定的文档目录放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录.
.htacess是Apache服务器的一个配置文件,负责相关目录下的网页配置,通过.htaccess可以实现网页301重定向,自定义404错误页面等功能.默认是
deny from all
无条件禁止访问.
7.2 config
config是配置目录,包含以下php文件:
- app.php:应用配置文件,包含应用地址,应用命名空间,是否开启路由,默认应用,默认时区,应用映射,域名绑定,禁止RUL访问的应用列表,异常页面的模板文件,错误显示信息,显示错误信息等配置.
- cache.php:缓存设置,包括默认缓存驱动,驱动方式,缓存保存目录,缓存前缀,缓存有效期,缓存标签前缀,序列化机制等配置.
- console.php:控制台配置,默认包含指令定义的配置.
- cookie.php:cookie配置,包括保存时间,保存路径,有效域名,是否启用安全传输,是否使用setcookie,httponly等配置.
- database.php:数据库配置,包含数据库连接(包括类型,地址,库名,用户名,密码,连接参数,默认编码,表前缀,部署方式:0代表集中式,1代表分布式,是否开启读写分离,读写分离后的主服务器数量,指定的从服务器序号,是否严格检查字段存在,是否断线重连,监听SQL,开启字段缓存,字段缓存路径),时间查询规则,自动写入时间戳字段,时间字段取出后的默认格式等配置.
- filesystem.php:文件系统配置,包含默认磁盘,磁盘列表,磁盘类型,磁盘路径,磁盘路径对应的外部URL路径,可见性等配置.
- lang.php:多语言配置,包括默认语言,允许的语言列表,多语言自动侦测变量名,是否使用cookie,多语言cookie变量,扩展语言包,Accept-Language转义为对应的语言包名称,是否支持语言分组等配置.
- log.php:日志配置,包括默认日志记录通道(包括日志记录方式,保存目录,单文件日志写入,独立日志级别,最大日志文件数量,使用JSON格式记录,日志处理器,是否关闭通道日志写入,日式出书格式化格式,是否实时写入),日志记录级别,日志类型记录通道,是否关闭全局日志写入,全局日志处理器等配置.
- middleware.php:中间件配置.
- route.php:路由配置,包括pathinfo分隔符,URL伪静态后缀,URL普通方式参数,是否开启 路由延迟解析,是否强制使用路由,合并路由规则,路由是否完全匹配,访问控制器层名称,空控制器名,是否使用控制器后缀,是否开启请求缓存,请求缓存有效期,全局请求缓存排除规则,默认控制器名,默认操作名,操作方法后缀,默认JSONP格式返回处理方法,默认JSONP处理方法等配置.
- session.php:会话配置,包括会话名称,会话ID,驱动方式,存储连接标识,过期时间,前缀等配置.
- trace.php:Trace配置,开启调试模式后有效.
- view.php:模板配置,包括模板引擎类型,默认模板渲染规则,模板目录名,模板后缀,模板文件名分隔符,模板引擎普通标签开始/结束标识,标签库标签开始/结束标记等配置.
7.3 extend
扩展类库目录,默认只有一个.gitignore.
7.4 public
对外访问目录,默认包含:
- static文件夹:静态资源文件夹,默认带一个.gitignore.
- .htaccess:Apache配置文件,用于Apache的重写.
- favicon.ico:标签图标.
- index.php:入口文件.
- robots.txt:一个遵循Robots协议(也叫爬虫协议,机器人协议等,全称为网络爬虫排除标准)的txt,是搜索引擎中访问网站时要查看的第一个文件,告诉蜘蛛程序在服务器上什么文件是可以被查看的.默认的配置表示所有的搜索引擎可以查看,禁止列表为空.
- router.php:快速测试文件.
7.5 route
路由定义目录,默认包含一个app.php,路由定义文件.
7.6 runtime
应用的运行时目录,默认只有.gitignore.
7.7 vendor
Composer类库目录,包含
- bin:包含一个叫var-dump-server的脚本与一个叫var-dump-server.bat批处理文件,是Laravel5.7的新特性,引入Laravel Dump Server扩展包.
- composer:包含一些自动加载的php文件(autoload_classmap.php,autoload_files.php,autoload_namespaces.php,autoload_psr4.php,autoload_real.php,autoload_static.php)与一个类加载器ClassLoader.php,还有一个installed.json,包含一些安装信息.
- league:Laravel基于Frank de Jonge开发的PHP包Flysystem,提供了强大的文件系统抽象层处理,Laravel集成Flysystem以便使用不同的驱动简化对文件系统的操作.
- opis:闭包处理相关.
- psr:PHP规范处理,包括PSR缓存,PSR简单缓存,PSR容器以及PSR日志.
- symfony:基于MVC架构的PHP框架Symfony.
- topthink:TP框架,包括四个子文件夹:framework,think-helper,think-orm,think-trace.framework是TP6框架核心,think-helper是TP6常用的一些扩展类库,think-orm是基于PHP7.1+和PDO实现的ORM,支持多数据库,think-trace是TP6页面Trace扩展,支持Html页面和浏览器控制台两种方式输出.
- autoload.php:Composer生成的自动加载文件.
- services.php:安装TP自动生成的文件,默认返回一个长度为1的数组.
7.8 view
视图目录,如果不适用视图可以删除该目录.
8 配置
8.1 单应用配置
单应用模式的根目录下的config目录就是所有配置文件,里面的文件会被自动读取,如果存在子目录可以通过Config的load方法手动加载,如:
//加载config/extra/config.php,读取到extra.
\think\facade\Config::load('extra/config','extra');
8.2 多应用配置
多应用配置的话根目录下的config就是全局配置文件,而每个应用的配置文件在对应的应用目录下的config中,相同的参数会覆盖全局配置.
|--app
| |--app1
| | |--config(应用配置)
| | | |--xxxconfig.php
| | | |...
| |--app2
| | |--config(应用配置)
| | | |--xxxconfig.php
| | | |...
|--config(全局配置)
| |--xxxconfig.php
8.3 环境变量
官方建议,除了一级配置外,配置参数的名字建议使用小写,以下配置只能在环境变量中修改:
| app_debug | 描述 |
|---|---|
| app_debug | 应用调试模式 |
| config_ext | 配置文件后缀 |
开发过程中的.env文件(默认为.example.env)可以模拟环境变量配置,采用ini格式.
如果部署环境中单独使用配置了环境变量(前缀PHP_),需要删除.env配置文件避免冲突.
获取环境变量需要先引入think\facde\Env,然后使用:
Env::get('xxx');
获取.环境变量获取不区分大小写,支持默认值.
8.4 Config类
使用Config类需要先引入:
use think\facade\Config
用以下方法读取一级配置:
Config::get('app');
读取单个配置参数:
Config::get('app.app_name');
判断是否存在某个设置参数:
Config::has('template');
设置参数:
Config::set(['name1'=>'value1','name2'=>'value2'],'config');
8.5 使用Yaconf进行配置处理
8.5.1 Yaconf介绍
Yaconf是一个高性能的配置管理扩展,在PHP启动时处理所有要处理的配置,所有配置的内容都是immutable的,支持丰富的配置类型,包括字符串,数组,分节,分节继承,并且可以在配置中直接写PHP常量与环境变量等.
8.5.2 使用
TP中使用的Yaconf不支持动态设置,使用前需要先安装think-yaconf扩展,安装之后不再区分全局与应用配置.
安装think-yaconf扩展:
composer require topthink/think-yaconf
在app下的provider.php添加:
'think\Config' => '\think\Yaconf'
然后使用setYaconf指定Yaconf使用的独立配置文件,如:
think\facade\Config::setYaconf('thinkphp');
设置后只需要在thinkphp.ini一个文件进行项目的配置.
更多Yaconf用法戳这里.
如果觉得文章好看,欢迎点赞.
同时欢迎关注微信公众号:氷泠之路.

TP6学习笔记一:安装与基本配置的更多相关文章
- IDEA 学习笔记之 安装和基本配置
安装和基本配置: 下载:https://www.jetbrains.com/idea/download/#section=windows 下载Zip安装包: 基础知识: Eclipse的工作区=IDE ...
- webpack学习笔记—webpack安装、基本配置
文章结构: 什么是webpack? 安装webpack 'webpack基本配置 一.什么是webpack? 在学习react时发现大部分文章都是react和webpack结合使用的,所以在学reac ...
- Java学习笔记一——安装JDK并配置环境变量
下载安装JDK1.8 在官网上下载JDK,官网地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213 ...
- 一、SpringBoot学习笔记_Eclipse 安装 SpringBoot、配置Gradle
首先查看Eclipse 的版本 点击Help ,然后在点击About 就会出现下面的图片 去官网下载对应版本的SpringBoot插件压缩包,下载保存到能找到的位置 然后 点击 Help Inst ...
- CentOS学习笔记--Tomcat安装
Tomcat安装 通常情况下我们要配置Tomcat是很容易的一件事情,但是如果您要架设多用户多服务的Java虚拟主机就不那么容易了.其中最大的一个问题就是Tomcat执行权限.普通方式配置的Tomca ...
- OracleDesigner学习笔记1――安装篇
OracleDesigner学习笔记1――安装篇 QQ:King MSN:qiutianwh@msn.com Email:qqking@gmail.com 一. 前言 Oracle是当 ...
- OpenCV 学习笔记 01 安装OpenCV及相关依赖库
本次学习是基于Window10进行的.语言为python3. 1 与opencv相关的库简介 1.1 numpy numpy 是 OpenCV 绑定 python 时所依赖的库,此意味着numpy在安 ...
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- CUBRID学习笔记 2 安装教程
下载地址 http://www.cubrid.org/?mid=downloads&item=any&os=detect&cubrid=9.3.0 选择适合你的服务器版本 l ...
随机推荐
- restful风格的理解
简而言之,就是不同的命令响应不同的操作: 关注点在url中的不同参数,是因为不同的参数才使得不同的method去对应的不同的操作.
- io流+网络+线程池 实现简单的多客户端与服务器端通信
1 import java.io.IOException; 2 import java.io.InputStream; 3 import java.io.OutputStream; 4 import ...
- Hyperf-JsonRpc使用
Hyperf-JsonRpc使用 标签(空格分隔): php 安装扩展包 composer require hyperf/json-rpc composer require hyperf/rpc-se ...
- C++核心篇
C++核心编程 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓. 1 内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统 ...
- HDOJ-2222(AC自动机+求有多少个模板串出现在文本串中)
Keywords Search HDOJ-2222 本文是AC自动机的模板题,主要是利用自动机求有多少个模板出现在文本串中 由于有多组输入,所以每组开始的时候需要正确的初始化,为了不出错 由于题目的要 ...
- PCA——主成分分析
PCA(Principal Components Analysis)主成分分析是一个简单的机器学习算法,利用正交变换把由线性相关变量表示的观测数据转换为由少量线性无关比变量表示的数据,实现降维的同时尽 ...
- java 方法详解
什么是方法 方法的定义和调用 值传递与引用传递 值传递:指的是在方法调用时,传递的是参数是按值的拷贝传递. 特点:传递的是值的拷贝,也就是传递后就互不相关了. 引用传递:指的是在方法调用时,传递的参数 ...
- Java 常见对象 04
常见对象·Arrays 类和 包装类 数组高级冒泡排序原理图解 * A:画图演示 * 需求: 数组元素:{24, 69, 80, 57, 13} 请对数组元素进行排序 * 冒泡排序: 相邻元素两两比较 ...
- 再探命令行传参之c与python
继上一次java命令行传参 python sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:python解释 ...
- Java小tips之命令行传参
在命令行运行主函数时,后缀字符串,则会储存在args[]数组中,这种方法可以在程序运行时,借助Main函数传参 主类书写不规范见谅 ```java public class hello{ public ...
