目录
环境要求
php > 7.1
必须使用composer安装及更新
安装
PS I:\src\tp6> composer create-project topthink/think tp
Installing topthink/think (v6.0.0)
- Installing topthink/think (v6.0.0): Downloading (100%)
Created project in tp
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 14 installs, 0 updates, 0 removals
- Installing psr/container (1.0.0): Downloading (100%)
- Installing topthink/think-helper (v3.1.3):
...
Writing lock file
Generating autoload files
> @php think service:discover
Succeed!
> @php think vendor:publish
Succeed!
测试运行
采用内置web服务器运行测试,默认8000端口
php think run
目录结构
默认单应用模式
多应用模式
需要安装模式拓展
composer require topthink/think-multi-appwww
├─app 应用目录
│ ├─app_name 应用目录
│ │ ├─common.php 函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ ├─route 路由目录
│ │ └─ ... 更多类库目录
│ │
│ ├─common.php 公共函数文件
│ └─event.php 事件定义文件
│
├─config 全局配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─console.php 控制台配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─filesystem.php 文件磁盘配置
│ ├─lang.php 多语言配置
│ ├─log.php 日志配置
│ ├─middleware.php 中间件配置
│ ├─route.php URL和路由配置
│ ├─session.php Session配置
│ ├─trace.php Trace配置
│ └─view.php 视图配置
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor Composer类库目录
├─.example.env 环境变量示例文件
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think
配置
这里以多应用模式为例:
注意:官方说除了一级配置外,严格区分大小写。显然很容易让人混淆,不如建议自己约定统一采用小写。
全局配置
app/config/*
对所有应用有效
应用配置
app/app*/config/*
只对当前应用有效
环境配置
官方只强调了怎么配置,没有说环境配置的目的和使用,对于TP6小白,可能不够友好。
配置文件名描述
app.php应用配置
cache.php缓存配置
console.php控制台配置
cookie.phpCookie配置
database.php数据库配置
filesystem.php磁盘配置
lang.php多语言配置
log.php日志配置
middleware.php中间件配置
route.php路由和URL配置
session.phpSession配置
trace.php页面Trace配置
view.php视图配置
请求流程
流程环节多,但官方说效率甚至比5.1更高
也看出确实采用了更多的成熟的设计模式和技巧,更好的TP将会更靠近laravel,毕竟框架设计模式及开发方法都有一套成熟的理念
控制器
从传统的MVC来看,C不应该做太多业务逻辑处理,应该是考虑流程的梳理整合。
控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出。严格来说,控制器不应该过多的介入业务逻辑处理。
多应用模式
安装多应用扩展模式:
PS I:\src\tp6\tp> composer require topthink/think-multi-app
Using version ^1.0 for topthink/think-multi-app
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing topthink/think-multi-app (v1.0.11): Downloading (100%)
Writing lock file
Generating autoload files
> @php think service:discover
Succeed!
> @php think vendor:publish
File I:\src\tp6\tp\config\trace.php exist!
Succeed!
允许为每个应用增加应用入口文件(public/index.php)
应用映射,支持应用的别名映射,映射支持泛解析
支持使用composer加载应用,设置虽然相对复杂
支持域名绑定应用
支持禁止应用访问
URL访问
pathinfo的支持
apache、iis、nginx 重写支持单一入口
容器
tp5引入的容器,到底是什么意思?
官方是这么说的:ThinkPHP使用容器来更方便的管理类依赖及运行依赖注入,新版的容器支持PSR-11规范。
大部分人还是不懂得容器是什么?
依赖注入
如果小白还不懂得什么是依赖注入的话:
[IOC/DI通俗解释]https://www.iteye.com/blog/cngolon-2187021
了解了依赖注入后,再去看TP官方关于依赖注入的使用
依赖注入的对象参数支持多个,且与顺序无关
以下场景支持依赖注入:
控制器构造方法
控制器操作方法
路由的闭包定义
事件类的执行方法
中间件的执行方法等
服务
官方文档更多的是说服务定义、服务注册、启动,没有更多关于服务的使用和目的。
文档碎片化较多,小白很难理解。(好的开发者文档可以参考微信小程序,都会说明为什么做,理论怎么做,范例怎么做,最佳实践等)
为什么要注册系统服务,也就是将服务绑定到容器中?
服务更多停留在内置服务,后续有时间展开。
门面
官方:门面为容器中的(动态)类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可测试性和扩展性,你可以为任何的非静态类库定义一个facade类。
看完官方描述,我们都有个疑问门面的应用场景是什么,为什么要用门面?可测试性和扩展性优势在哪里?
依赖注入和门面的使用方式不同,但可以达到同一个效果,当然在编码方式也会有一些差异,这就是框架给小白带来的额外学习负担和烦恼:
namespace app\index\controller;
use think\Request;
class Index
{
public function index(Request $request)
{
echo $request->controller();
}
}<?php
name