Releases: top-think/framework
V6.0.2
V6.0.1
主要更新:
- 完善
Request::withInput
- 修正Content-Type获取途径
- 改进 SocketLog 驱动
- 修正 ClientArg 获取途径
- 修复FileResponse的cookie空对象异常
- 支持渲染完整的异常链信息
- 异常页面支持折叠调用堆栈信息
- 改进异常响应时内容的一致性
- 改进Error控制器对数字访问的支持
- 修正redirect助手函数
- memcached delete 支持 timeout
- 修正redis驱动
- 改进memcache驱动
- 改进容器类
invokeMethod
方法 - 使用新的数组语法替代list
- 缓存默认的序列化方法改为serialize/unserialize
- Add Cookie SameSite(PHP>7.3)
- 扩展
Socket
驱动 - 修正异常页面的模板文件
- 事件监听去重
- 取消视图日志
- 修正验证jpg结尾的图片报错问题
- 改进Url生成
- 改进Url生成伪静态后缀设置false的情况
- 改进File类型session读取
gzcompress
问题 - 修复使用路由验证后路由变量丢失的问题
- 修正多应用下路由目录路径
- 修复
expand_level
选项异常 - 改进Cache类
remember
方法对依赖注入的支持 - 防止因日志配置异常时陷入死循环
- 模型支持动态设置数据库连接
- 修正
column
方法的查询缓存问题 - 改进Query类的
getAutoInc
方法 - 改进模型更新条件获取
- 修正使用模型对象更改数据时忽略自定义的
suffix
和connection
参数 - 修正XA事务
- 规范
column
方法的查询
V5.1.39
本次更新为常规更新,主要包括:
- 修正
memcached
驱动 - 改进
HasManyThrough
关联查询 - 改进
Request
类isJson
方法 - 改进关联查询
- 改进
redis
驱动 - 增加 Model类
getWhere
方法对复合主键的支持 - 改进
newQuery
方法 - 改进闭包查询的参数绑定
- 修正
Validate
- 修复某些情况下URL会多一个冒号
- 调整composer.json
- 修复使用
Cache::clear()
时,报错缓存文件不存在问题 - 使用File类的unlink方法进行文件删除
- 改进
paraseData
方法 - 修正image验证方法
- 改进Url生成
- 改进空操作对数字的支持
- 改进一处PHP7.4兼容性问题
V6.0.0
官方历时一年多倾力打造的ThinkPHP6.0
版本正式发布,该版本基于精简核心和统一用法两大原则在5.1
的基础上对底层架构做了进一步的优化改进,并更加规范化。
由于引入了一些新特性,ThinkPHP6.0
运行环境要求PHP7.1+
(推荐PHP7.3+
),不支持5.1
的无缝升级(官方提供了升级指导)。
主要特性:
- 采用
PHP7
强类型(严格模式) - 支持更多的
PSR
规范 - 多应用支持
ORM
组件独立- 改进的中间件机制
- 核心架构服务化
- 全新的事件系统
- 容器功能增强
- 模板引擎组件独立
- 内部功能中间件化
- SESSION机制改进
- 缓存及日志支持多通道
- 引入
Filesystem
组件 - 对
Swoole
以及协程支持改进 - 对IDE更加友好
- 统一和精简大量用法
强类型及严格模式
在主流框架里面,ThinkPHP6.0
是最先采用PHP7严格模式的。所有的核心文件都是开启了严格模式的类型约束,因此有任何的变量类型不符的情况都会抛出异常,有利于规范代码中的变量类型和提前发现问题隐患。
多应用模式
新版框架提供了多应用模式支持,默认安装为单应用,你只需要安装一个多应用模式扩展就可以更轻松的部署多个应用而不需要重复安装依赖组件,每个应用都支持独立入口访问以及域名绑定,也可以使用一个入口文件实现自动多应用部署。并且自动多应用模式支持智能识别,对于不存在的应用访问会自动切换到单应用模式进行匹配。同时支持应用的映射和禁止访问机制。
多应用模式的设计可以让开发更加模块化,因为每个应用的配置、路由及视图都可以纳入应用目录,所以更方便应用的模块化,甚至引入composer
应用。
容器和服务
新版的容器支持PSR-11
规范,容器类的功能特性主要包括:
- 绑定类、对象实例、接口到容器
- 创建类的实例(存在则直接获取)
- 容器对象绑定别名
- 支持容器对象(实例化)回调
- 获取容器对象实例
- 删除容器中的对象实例
- 提供依赖注入和门面实现支持
- 调用容器对象实例的方法(或者闭包)
- 提供容器对象的
ArrayAccess
支持
事件系统
新版的事件系统可以看成是5.1
版本行为系统的升级版,事件系统相比行为系统强大的地方在于事件本身可以是一个类,并且可以更好的支持事件订阅者。支持事件智能订阅,通过反射机制来识别当前订阅者要订阅的事件。
事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,也降低了BUG的可能性。
中间件支持完善
中间件分为全局中间件、应用中间件、路由中间件和控制器中间件,这四个中间件分组完全独立执行,但同一个分组内的中间件不会重复执行。中间件方法执行依赖注入,以及请求结束的回调机制。
核心很多功能都是基于中间件来完成,包括多应用模式也是采用中间件机制执行。
路由和请求
新版的路由精简了很多不必要的功能,路由定义也更加规范化和语义化,并且路由定义文件支持纳入应用目录,便于模块化开发。路由注解功能独立为think-annotation
库,并且使用更加规范,支持IDE提示。
新版的请求对象更易扩展,系统默认安装后提供了一个app\Request
类,你可以在应用中直接自定义请求对象,增加必要的属性和方法。但不会影响对think\Request
的依赖注入和门面调用。
系统服务
由于核心框架采用了服务化设计,你可以在你的扩展或者应用中注册需要的服务。在系统服务中注册一个对象到容器,或者对某些对象进行相关的依赖注入。由于系统服务的执行优先级问题,可以确保相关组件在执行的时候已经完成相关依赖注入。一个服务类通常包括注册(register
)和启动(boot
)方法,用于不同阶段的执行。
ORM组件化
内置的ORM功能已经完全独立为think-orm
组件,可以独立使用,ThinkPHP6.0
默认依赖安装了该组件,保持用法不变的同时,增强了查询功能。
模板引擎组件化
核心不再内置任何模板引擎,仅提供PHP模板支持,官方的模板引擎已经独立为think-template
模板引擎,并默认依赖安装。你可以更方便的使用第三方模板引擎。
日志系统
日志支持多通道、并统一命令行和WEB日志格式,主要包括:
- 日志增加多通道支持,可以同时或者切换写入多个通道
- WEB和CLI的日志记录格式统一,并支持日志格式化
- 对JSON日志格式的改进
- 支持日志写入事件
Session机制改进
6.0
版本的Session
机制完全重写了,并且不再使用PHP内置的Session
机制,全新实现一套Session
机制,可以更好的支持Swoole
/Workerman
等环境。
所以不再支持PHP内置的session_***
系列函数,也不再支持使用$_SESSION
读取session
数据,你必须通过框架提供的Session
类或者门面来操作,Request
类也封装了Session
数据的读取。
Session支持跨应用读取和自定义序列化机制,默认采用文件类型记录Session数据,由于共用了缓存机制,你还可以使用任何支持的缓存类型来记录Session数据。
引入Filesystem组件
新版增加了Filesystem
类库对文件系统强化了支持,而且可以很方便的支持各种云存储,包括阿里云和七牛云。
Swoole扩展改进
Swoole
扩展同时支持HTTP
和Socket
服务,支持数据库和缓存的连接池功能,以及RPC
功能。
调试工具更新
原来内置的页面Trace调试工具已经更改为扩展的方式,改成安装think-trace
扩展,如果通过composer安装应用的话,默认会安装topthink/think-trace
扩展。
基本用法和之前保持不变,但无需额外配置,默认使用html
方式显示,同时仍然支持浏览器控制台显示,并仅在调试模式下有效。
同时增加了一个基于debugbar
的调试扩展think-debugbar
,需要单独安装后才能使用。
composer require topthink/think-debugbar
统一和精简大量用法
新版对很多用法进行了精简和统一,尽可能避免在开发过程中规范不一的困惑。
开发手册
更多内容可以查看官方的完全开发手册。
V6.0.0RC5
主要更新包括:
多应用模式调整
鉴于多应用模式的复杂性和扩展性考虑,最新版本把多应用模式独立为框架的一个全局中间件扩展。默认安装后核心框架为单应用模式,如果需要使用多应用模式,可以安装
composer require topthink/think-multi-app
安装后会自动注册一个全局中间件并优先执行,就可以自动支持多应用模式,无需做任何的配置调整。如果需要进行应用映射或者域名绑定的话,仍然设置app_map
以及domain_bind
即可。
如果你的入口文件是index.php
的话,会自动开启自动多应用模式。如果你的入口文件是其它,例如admin.php
或者api.php
则会自动绑定admin
或者api
应用,当然,如果你在入口文件中已经使用name
方法绑定了应用,则优先。
另外,如果是自动多应用模式下,URL里面的应用不存在,会自动处理为单应用解析,也就是说多应用和单应用是可以在新版的架构下共存。举个例子,当我们访问下面的URL:
http://tp.com/think
假设think
应用并不存在(也没有定义任何的应用映射),当我们访问上面的地址的时候会自动进行单应用解析,也就是说如果有定义全局路由(例如route/route.php
)的话
Route::get('think', function () {
return 'hello,ThinkPHP!';
});
页面会输出
hello,ThinkPHP!
这样设计的初衷是为了更加方便扩展注册全局路由,避免在开启多应用模式的情况下注册的全局路由失效(比如之前的验证码扩展只能用于单应用模式,多应用模式需要单独注册路由)。
如果你完全不需要单应用模式,也可以设置使用严格的多应用模式
'app_express' => true,
'default_app' => 'home',
当我们再次访问
http://tp.com/think
的时候,其实是访问默认(home
)应用的think
路由。
中间件机制改进
由于多应用扩展独立后,中间件机制也随之进行了一些优化和调整,现在中间件大致分为四个组,包括全局中间件、应用中间件、路由中间件和控制器中间件,每个中间件组彼此独立按顺序运行。
在app/middleware.php
文件里面定义的中间件即为全局中间件,执行优先级最高(相对于前置中间件而言),如果使用了多应用模式,并且在应用目录下也定义了middleware.php
文件,即为应用中间件,执行优先级仅次于全局中间件。
如果在路由注册的时候定义了中间件即为路由中间件,注意,在路由中间件执行之前是获取不到当前应用的控制器和操作名的(所以,全局中间件和应用中间件执行的过程中是无法获取控制器和操作名的),如果你不想在路由注册的时候定义中间件,还有一个额外的办法,就是在路由配置文件(包括全局路由配置和应用路由配置)中定义middleware
参数,无论是否匹配路由都会执行,类似于全局路由中间件的概念。
'middleware' => [
app\middleware\Auth::class,
app\middleware\Check::class,
],
中间件调度优化
中间件的执行流程改进,think\middleware
仅仅负责中间件的管理和调度,增加think\Pipeline
类负责中间件的执行。并支持控制中间件的执行顺序。中间件配置文件的格式做了一些调整,除了定义中间件别名外,增加了执行优先级设置。
return [
// 别名或分组
'alias' => [
],
// 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
'priority' => [
],
];
中间件end
回调
中间件增加end
回调,如果在中间件类中有定义end
方法,则会在请求结束后统一调用。
public function end(Response $response)
{
}
中间件执行去重
对于每个分组的中间件,会进行强制去重操作,也就是说在一个分组中的中间件只可能执行一次。
模板目录自动识别
模板目录无需再进行任何的配置,取消了view_base
配置,改为自动识别,应用目录下的view
目录优先,如果不存在,则会使用应用根目录下的view
目录。如果要单独定义某个应用的模板目录,则使用view_path
配置参数定义即可。
事件智能订阅改进
事件智能订阅的时候不再需要事先注册和定义事件,采用反射机制自动识别订阅事件。
应用名获取调整
多应用模式改成扩展后,核心已经完全解耦了多应用相关的方法和属性,所以如果你需要获取当前的应用名,需要改成
app('http')->getName();
对于使用中间件进行权限控制用途的,官方的建议是采用pathinfo
地址进行权限判断。
think-swoole
扩展更新
think-swoole
扩展也在持续更新和完善,现在已经支持数据库和缓存的连接池功能,以及RPC功能。
调试工具更新
原来内置的页面Trace调试工具已经更改为扩展的方式,改成安装think-trace
扩展,如果通过composer安装应用的话,默认会安装topthink/think-trace
扩展,或者直接安装。
composer require topthink/think-trace
原核心内置的
TraceDebug
中间件不再使用,请在中间件定义文件中注释掉。
基本用法和之前保持不变,但无需额外配置,默认使用html
方式显示,同时仍然支持浏览器控制台显示,并仅在调试模式下有效。
同时增加了一个基于debugbar
的调试扩展think-debugbar
,需要单独安装后才能使用。
composer require topthink/think-debugbar
V6.0.0RC4
RC4
版本主要改进包括ORM
库独立,日志系统增加多通道支持,缓存、日志、数据库的配置文件统一调整为多通道模式。
本次更新相对于RC3版本主要涉及配置文件的更新,其它调整参考更新日志的用法调整部分。
主要新特性
数据库和模型改为独立的think-orm
库
数据库和模型操作核心不再内置,改为统一依赖topthink/think-orm
库(该类库已经包括其它的数据库驱动),用法保持一致,功能也没有任何的缺失。
此前think-orm
库已经独立更新维护,但一直是同步核心的ORM,2.0
版本进行了架构调整,保持独立性的同时支持框架依赖,以后数据库操作这块统一在此类库更新。
模型功能增强
对模型做了大量的功能改进,主要包括:
- 关联类增加
withField
和withLimit
方法 - 改进模型的
hasWhere
方法对闭包查询条件的支持完善 - 支持
has
/hasWhere
的多次调用 - 模型的
has
/hasWhere
方法支持软删除 - 增加远程一对一关联
- 远程一对一和一对多支持预载入及
has
/hasWhere
查询 - 模型类支持序列化及缓存操作
- 关联预载入查询支持缓存
- 模型方法支持依赖注入
- 模型事件改进支持系统事件系统
日志支持多通道、并统一命令行和WEB日志格式
此次更新对日志类做了较大的调整和增强,主要包括:
- 日志增加多通道支持,可以同时或者切换写入多个通道
- WEB和CLI的日志记录格式统一,并支持日志格式化
- 对JSON日志格式的改进
- 支持日志写入事件
增加Filesystem
组件
Filesystem
组件用以替代之前的上传类,提供了更多上传到远端的扩展库支持。
容器对象增加回调机制
容器中的对象实例化之后,引入回调机制,利用该机制可以实现诸如注解功能等相关功能。
你可以通过resolving
方法注册一个全局回调
Container::getInstance()->resolving(function($instance,$container) {
// ...
});
回调方法支持两个参数,第一个参数是容器对象实例,第二个参数是容器实例本身。
或者单独注册一个某个容器对象的回调
Container::getInstance()->resolving(\think\Cache::class,function($instance,$container) {
// ...
});
路由注解独立为think-annotation
库
路由注解功能独立为think-annotation
库,并且使用更加规范,支持IDE提示。
多应用模式下路由定义支持纳入应用目录
在多应用模式下,路由定义文件支持放入应用目录的route
目录下。
模板根目录默认放入根目录下的view
目录
模板根目录默认从应用目录下移动到根目录的view
目录,如果是多应用模式的话,下面是应用子目录,如果你需要改回放入原先的应用目录下,可以在应用的template
配置文件中定义view_path
。
'view_path' => app_path('view'),
更新日志
功能改进
- 改进路由类的配置读取
- 改进
parseLike
查询 - 改进
ViewResponse
类增加内容渲染输出支持 - 增加
display
助手函数 - 验证类
maker
方法支持注入扩展验证规则 - 改进事件触发的对象传入
- 改进
Console/Table
类 - 改进关联定义对查询构造器的支持
- 关联类增加
withField
和withLimit
方法,并取消Query
类withField
方法 - 增加延迟关联查询对
withLimit
的支持 - 改进模型
toArray
方法 - 改进Url生成的域名参数
- 改进
make:command
指令生成 - 缓存有效期支持
DateInterval
- 改进Query类find方法
- 改进
json
查询 - 改进查询缓存
- 增加
filesystem
组件 - 改进跨域请求
- 改进路由检测缓存配置
- 改进注解路由的文件写入
- 路由注册支持注册
options
请求类型 - 改进重定向路由检测
- 改进模型的
hasWhere
方法对闭包查询条件的支持完善 - 增加
time_query_rule
数据库配置参数 用于自定义时间查询规则 - 改进时间字段类型的自动识别
- 改进
redis
驱动 - 容器对象增加
invoke
回调机制 - 改进多对多关联
- 资源路由增加
withModel
和withValidate
对各个路由设置不同的模型绑定和验证 - 改进
getLastInsID
方法 - 日志类调整 支持多通道写入
- 改进模型输出
- 支持单独关闭某个通道的日志写入
- 取消部署模式下 不写入调试日志的功能 用调试级别设置单独的日志渠道来替代
- 改进日志记录格式
- 支持日志输出格式化
- 改进资源路由
- 改进命令行日志实时写入
- 日志通道支持单独设置level配置参数
- Log类调整优化
- 增加
paginateX
查询用于大数据分页查询 - 数据集增加
first
和last
方法 - 改进
response/View
类的assign
方法 - 改进请求参数获取问题
- 改进
pathinfo
方法 - 增加一些路径助手函数
- 改进多级控制器访问
- Log类支持
__call
方法 - 多应用模式的路由定义支持放入单独的应用目录
- 模型增加依赖注入支持
- 改进模型事件
- 改进页面
Trace
机制 - 改进
validate
助手函数,支持设置验证失败后是否抛出异常 - 改进容器
bind
方法 - 改进Redis Session驱动
- 改进日志记录的空行问题
- 改进
RedirectResponse
- 改进缓存驱动
- 改进
think optimize:schema
指令 - Url类增加https方法
- 改进
isPjax
判断 - 改进Db类配置获取
问题修正
- 修正模型属性获取
- 修正Request类的过滤功能
- 修正
subDomain
方法 - 修正
input
助手函数 - 修正模型
refresh
方法 - 修正关联统计不使用子查询的方式
- 修正Request类
root
方法 - 修正缓存有效期处理
- 修正
MorphTo
关联 - 修正缓存标签
- 修正mysql驱动
insert
方法 - 修正Db类
connect
方法 - 修正
allowCrossDomain
方法 - 修正Query类
chunk
方法 - 修正分组跨域
- 修正关联预载入查询
- 修正时间字段写入
- 修正验证类
checkSize
- 修正多对多关联闭包
- 修正RuleName类
setRule
方法 - 修正
whereTime
查询 - 修正
request
助手函数 - 修正日志关闭配置
- 修复对多字节字符的兼容性
用法调整
- 模型切换后缀方法
switch
更改为suffix
- 关联定义仅支持查询类的方法
- 取消Query类的
fetchArray
方法 select
查询方法默认返回数据集对象- 取消
optimize:config
指令 - 调整数据库和缓存配置文件格式 默认采用多类型支持 方便切换
- Cache类的
init
和connect
方法取消 并入store
方法 cache
助手函数取消初始化用法cache
助手函数留空返回Cache对象- 默认时间字段类型改为
timestamp
- 注解路由移出核心,注解相关功能使用
topthink/think-annotation
- 改进路由 取消
url_convert
配置参数 - 取消
route:build
指令 - 调整默认模板目录为根目录
view
- 取消默认的请求日志记录 在项目里面自己添加
- 统一
find
查询必须使用查询条件 - 扩展的
service
配置文件默认放到vendor
目录下 - 废除
LogLevel
事件 - 取消App类的序列化方法
- 控制台的
user
配置改为通过静态方法设置当前执行用户
V5.1.38.1
V5.1.38
本次更新为常规更新,主要包括:
Request
类增加isJson
方法- 改进浮点型查询
- 修正关联查询关联外键为空的查询错误
- 远程一对多支持关联统计和预载入查询
- 远程一对多关联支持
has
/hasWhere
查询 - 优化
parseIn
解析 - 改进
parseLike
查询 - 改进Url生成
- 改进模型的
toArray
方法 - 修正
notIn
查询 - 改进
JSON
字段查询 - 改进Controller类
display
/fetch
方法返回ViewResponse
对象 - 改进
param
方法 - 改进
mysql
驱动getExplain
方法 - 改进时间查询
- 改进模型关联的
has
/hasWhere
方法对软删除的支持
V6.0.0RC3
RC3版本主要改进和优化了系统内置中间件,改进了一些用法和体验,并且把不常用的驱动移出核心改为扩展方式提供。
主要新特性
增加whereWeek
日期查询
// 查询本周文章
Article::whereWeek('create_time')->select();
// 查询上周文章
Article::whereWeek('create_time', 'last week')->select();
// 查询2019-1-1到2019-1-7的文章
Article::whereWeek('create_time', '2019-1-1')->select();
自增ID获取支持类型自动转换
自增ID获取的时候会根据主键的字段类型自动转换处理,而不是PDO默认返回的字符串类型。
当前请求记录匹配路由规则
记录当前请求的路由规则对象,可以通过
$request->rule();
获取当前请求实际匹配的路由规则对象
增加requireWithout
验证规则
表示当某个字段没有数据的时候必须,可以组合完成表单中某两个字段必须填写一项的验证,例如:
'phone' => 'requireWithout:mobile',
'mobile'=> 'requireWithout:phone',
优化路由ext和name方法以及URL生成
增加项目自定义类
取消了内置的think\Controller
控制器基类,在项目中提供了app\BaseController
控制器基类更方便自定义。
另外项目还提供了app\Request
自定义请求类,可以自定义应用所需的请求方法和属性。提供了app\ExceptionHandle
自定义异常处理类
,方便对异常进行自定义接管处理。
URL生成使用对象方式操作
Route类buildUrl
及url
助手函数返回类型改为think\route\Url
对象实例而不是字符串,由于定义了__toString
方法,因此可以在模板中直接输出为URL字符串。
echo url('index/hello',['name'=>'think'])->suffix('htm')->domain('blog');
修改器改进
改进修改器方法支持不返回任何数据,而是在修改器中直接设置数据
例如:
class User extends \think\Model
{
public function setField1Attr($value,$data){
$this->set('field2', $data['field2']);
$this->set('field3', $data['field3']);
}
}
$user = new User;
$user->field1 = 'value1';
$user->save();
实际写入数据库的时候不会包含field1
字段数据,但会包含field2
和field3
的数据。
dump
/halt
助手函数调整支持输出多个变量
你可以使用
dump($var1,$var2,...)
方式输出多个变量调试,同样halt
方法也可以支持调试多个变量输出并中止执行。
最新版本会在安装项目的时候安装symfony/var-dumper
扩展替换内置的dump
助手函数,因此你可以进行更强大的输出
关联自动更新
关联together
方法自动更新和删除的时候可以无需使用with
例如,之前的写法
$article = Article::with('comments')->find(1);
$article->together(['comments'])->delete();
现在可以直接写成
$article = Article::find(1);
$article->together(['comments'])->delete();
模型数据集增加delete
和update
方法
可以批量对数据集进行更新和删除操作(支持模型事件)
// 更新今天的数据
$list = Article::whereDay('create_time')->select();
$list->update(['is_new'=>1]);
// 删除昨天的数据
$list = Article::whereDay('create_time', 'yesterday')->select();
$list->delete();
模型支持表后缀以及动态切换
<?php
namespace app\model;
use think\Model;
class Blog extends Model
{
// 定义默认的表后缀(默认查询中文数据)
protected $suffix = _cn';
}
模型提供了动态切换方法switch
和setSuffix
,例如:
// switch方法用于静态查询
Blog::switch('_en')->find();
// setSuffix用于动态设置
$blog = new Blog($data);
$blog->setSuffix('_en')->save();
注解路由支持给某个路由指定所属分组
在注解中定义路由分组,可以使用
<?php
namespace app\controller;
/**
* @group('blog')
*/
class Blog
{
/**
* @param string $name 数据名称
* @return mixed
* @route('hello/:name','get')
*/
public function hello($name)
{
return 'hello,'.$name;
}
}
当前控制器中的注解路由会自动加入blog
分组下面,最终,会注册一个blog/hello/:name
的路由规则。你一样可以对该路由分组设置公共的参数,例如:
<?php
namespace app\controller;
/**
* @group('blog')->ext('html')
* ->pattern(['id' => '\d+', 'name' => '\w+'])
*
*/
class Blog
{
/**
* @param string $name 数据名称
* @return mixed
* @route('hello/:name','get')
*/
public function hello($name)
{
return 'hello,'.$name;
}
}
如果你已经在路由定义文件中定义了blog
分组,也可以直接把某个路由加入该分组,例如:
<?php
namespace app\controller;
class Blog
{
/**
* @param string $name 数据名称
* @return mixed
* @route('hello/:name','get')->group('blog')
*/
public function hello($name)
{
return 'hello,'.$name;
}
}
多语言支持分组定义
你可以在定义多语言的时候使用分组定义
return [
'user' => [
'welcome' => '欢迎回来',
'login' => '用户登录',
'logout' => '用户登出',
]
];
然后使用下面的方式获取多语言变量
Lang::get('user.login');
lang('user.login');
支持自定义加载语言文件
可以通过extend_list
设置,例如:
'extend_list' => [
'zh-cn' => [
app()->getBasePath() . 'lang\zh-cn\app.php',
app()->getBasePath() . 'lang\zh-cn\core.php',
],
]
便于在扩展中自定义语言包
,并且现在已经支持语言文件使用YML
格式定义
缓存标签改进
增加TagSet
类,tag
方法支持传入数组,同时对多个标签进行操作
Cache::tag('tag')->set('name1','value1');
Cache::tag('tag')->set('name2','value2');
// 清除tag标签的缓存数据
Cache::tag('tag')->clear();
并支持同时指定多个缓存标签操作
Cache::tag(['tag1', 'tag2'])->set('name1', 'value1');
Cache::tag(['tag1', 'tag2'])->set('name2', 'value2');
// 清除多个标签的缓存数据
Cache::tag(['tag1','tag2'])->clear();
可以追加某个缓存到标签
Cache::tag('tag')->append('name3');
缓存类增加push
方法
增加元素到一个数组缓存
Cache::set('name', [1,2,3]);
Cache::push('name', 4);
Cache::get('name'); // [1,2,3,4]
Cookie保存时间支持DateTimeInterface
增加表单令牌中间件
控制器支持__call方法
增加deny_app_list
配置参数
可以配置禁止直接访问的应用列表
控制器中间件改进
控制器中间件的only
和except
定义不区分大小写
app_map
支持指定泛应用映射
可以在app_map
配置中定义泛应用解析到指定应用,例如:
'app_map' => [
'think' => 'admin', // 把admin应用映射为think
// ... 其它应用映射定义
'*' => 'home', // 其它应用解析到home
],
问题修正
- 修正参数绑定的浮点型精度问题
- 修正软删除
- 修正模型的数据库连接
- 修正
RedirectResponse
- 修正Session类
flush
方法 - 修正JSON字段参数绑定
- 修正
make:controller
指令生成 - 修正Cache类的
get
方法默认值 - 修正域名绑定
- 修正关联模型的动态获取器
- 修正模型
dateFormat
属性方法 - 修正url生成对多入口的支持
- 修正ini配置文件格式的布尔值转换问题
- 修正路由延迟解析全局配置无效的问题
- 修正路由缓存问题
- 修正关联
update
操作 - 修正
Relation::$selfRelation
默认为null
,导致Relation::isSelfRelation()
方法报错 - 修正
redis
缓存驱动 - 修正事件智能订阅
observe
方法 - 修正模型字段定义对日期查询无效的问题
- 修正Console类
getNamespaces
方法 - 修正
where
查询方法传入Query对象的时候缺少bind
数据的问题 - 修正request类
method
方法 - 修正
route:list
指令 - 修正
Collection
类load
方法 - 修正
redis
驱动的端口类型 - 修正
session
数据序列化使用JSON处理的问题 - 修正分组路由合并解析
- 修正模型的
hidden
方法隐藏关联模型的问题 - 修正关联查询关联键为空的错误
- 修正返回204状态码的响应判断
- 修正
Request
类has
方法对env
和session
的支持 - 修正
provider.php
文件无效问题 - 修正关联查询的部分问题
- 修正validate助手函数支持指定验证器类
- 修正验证类
getValidateType
方法 - 修正入口单独开启调试模式
- 修正加载Composer应用
用法调整
- 页面
trace
中间件仅在调试模式有效
,并且无需设置环境变量 Socket
日志驱动移出核心PostgreSQL
、Sqlite
和SqlServer
驱动移出核心
,改为扩展- 取消内置
think\Controller
基类 Yaconf
支持移出核心 纳入扩展think-yaconf
- 字段排除改为
withoutField
方法 - 取消
useGlobalScope
方法增加withoutGlobalScope
方法 - 更改默认生成的中间件位置
- 加载默认语言包无需开启多语言中间件
Cookie
类恢复get
和has
方法支持token
助手函数调整- 全局请求缓存参数调整
- 统一中间件调用传参,不支持
:
分割传参 - 缓存数据统一进行序列化后存储
废弃用法
- 取消多语言的
auto_detect
配置 - 取消
session
类的auto_start
配置参数和boot
方法 - 废弃
Where
数组对象查询 - 取消模型事件观察者
- 取消
JumpResponse
及success
/error
/result
等方法和助手函数 - 取消表达式查询解析扩展及
think\db\Expression
类 - 废弃模型自动完成功能,使用模型事件替代
- 取消
cookie
的prefix
参数 - 取消一系列不推荐使用的助手函数
- 取消
optimize:facade
optimize:model
指令 改为扩展方式 - 取消命令行执行URL
- 删除
Config
类__get
和__isset
方法