内容简介:本次更新了大量的细节,进一步统一和精简了用法,并且新增了一些功能。在正式版发布之前,不建议用于正式项目,目前也还没有完善的文档和详细的测试。相比较
本次更新了大量的细节,进一步统一和精简了用法,并且新增了一些功能。
在正式版发布之前,不建议用于正式项目,目前也还没有完善的文档和详细的测试。
主要更新
相比较 beta2
版本(
Beta2
版本更新参考这里
),除了一些修正和改进外,主要包含了如下的功能更新和调整。
视图和模板引擎从核心分离
视图和模板引擎类不再内置到核心框架,需要的时候可以单独通过
composer require topthink/think-view
安装,如果使用
composer create-project topthink/think
会默认安装该组件(如果不需要使用的话可以自己卸载 topthink/think-view
)。
安装后,由于内置的 think\Controller
类不再封装视图方法,如果你的控制器类需要调用 fetch
/ display
/ assign
等视图方法,必须继承 think\ViewController
类,使用 view
助手函数方式用法不变。
取消数据库的 setInc
/ setDec
/ setField
方法
原来的 setInc
/ setDec
/ setField
方法不再支持,使用 inc
/ dec
/ update
方法替代。例如:
Db::name('user')->where('id', 1) ->inc('exp') ->dec('score') ->update();
取消查询 eq/neq/gt/lt/egt/elt
表达式
由于存在两种用法,并且不够直观,全部统一为更直观的用法。
下面的用法不再支持
Db::name('user')->where('id', 'egt', 1) ->where('status', 'neq' ,1) ->select();
统一使用
Db::name('user')->where('id', '>=', 1) ->where('status', '<>' ,1) ->select();
取消分表功能
出于分表的性能问题和复杂性,不再提供分表方法,建议使用数据库的分区功能替代。
增加年/月/日的便捷日期查询方法
可以使用下面的便捷日期查询
// 查询2018年的博客数 Db::name('blog')->whereYear('create_time', '2018')->count(); // 查询2018年12月的博客数 Db::name('blog')->whereMonth('create_time', '2018-12')->count(); // 查询2018年12月24日的博客数 Db::name('blog')->whereDay('create_time', '2018-12-24')->count();
query
原生查询也可以支持查询缓存
使用query进行 SQL 语句查询的时候也可以支持查询缓存,例如:
Db::cache('cache_key')->query("select * from blog where create_time > '2018-12-1'");
如果使用了数据库的读写分离,需要从主库查询的话,需要使用
Db::master(true)->query("select * from blog where create_time > '2018-12-1'");
数据库的查询统计合并
数据库的查询次数合并到 queryTimes
,不再区分读写操作,你可以使用下面的方法获取当前请求的数据库查询次数(包括读写)
Db::getQueryTimes();
模型延迟自动保存
模型增加延迟保存方法 lazySave
,调用该方法后不会马上保存数据,仅仅是保存在内存中,当前模型对象销毁的时候或者下次显式调用 save
方法的时候都会自动保存到数据库。
$user = User::find(1); $user->name = 'thinkphp'; $user->lazySave(); ... $user->score = 100; $user->save();
模型事件调整
模型事件不再支持使用 event
方法注册事件,统一使用模型事件观察者类,你只需要在模型定义或者初始化的时候设置 observerClass
属性。
<?php namespace app\index\model; use think\Model; class User extends Model { protected $observerClass = 'app\index\observe\User'; }
所有的模型事件统一在观察者类中进行定义,方法的命名规范如下:
<?php namespace app\index\observe; class User { public function onAfterRead($user){ $user->extra = 'extra'; } public function onBeforeWrite($user){ $user->extra = 'extra'; } }
并且模型增加 after_read
事件,在查询后创建模型对象实例的时候触发。
模型属性和数据表字段的对应关系
默认情况下,模型对象数据字段严格区分大小写,你可以关闭严格模式(前提是必须保持数据表字段的小写和下划线定义规范),然后在模型中使用的时候,如果使用驼峰命名调用,则会自动转换为小写和下划线规范的字段(关连模型除外),例如:
<?php namespace app\index\model; use think\Model; class User extends Model { protected $strict = false; }
然后,下面的代码
$user = User::find(); echo $user->nick_name; $user->nick_name = 'test'; $user->save();
和下面的用法是等效的
$user = User::find(); echo $user->nickName; $user->nickName = 'test'; $user->save();
如果你的数据表字段不符合规范(存在大小写混合使用的情况),那么必须在模型中开启 strict
属性。
增加乐观锁功能
和软删除一样,增加了一个 think\model\concern\OptimLock
Trait用于方便引入扩展模型的乐观锁功能。
<?php namespace app\index\model; use think\model\conern\OptimLock; use think\Model; class User extends Model { use OptimLock; protected $optimLock = 'lock_version'; }
增加 PSR-11
支持
支持 PSR-11
规范,增加 psr/container
依赖, Container
类增加 pull
方法替代之前的静态 get
方法。
增加闭包数据的缓存序列化支持
添加了 opis/closure
依赖用于支持闭包的序列化支持。
增加自动多应用支持
支持在同一个入口文件中访问多个应用,并且支持应用的映射关系以及自定义。
例如在 index.php
入口文件中使用:
(new App())->autoMulti()->run()->send();
就可以不必创建入口文件自动通过URL访问多个应用
http://serverName/index.php/admin
如果你的默认应用不是 index
(默认为入口文件名),那么可以通过 name
方法指定默认应用。
(new App())->autoMulti() ->name('admin') ->run() ->send();
支持应用名的别名映射,例如:
(new App())->autoMulti([ 'think' => 'admin', // 把admin应用映射为think ])->run()->send();
如果需要对某个应用进行自定义,可以使用
(new App())->autoMulti([ 'admin' => function($app) { $app->debug(true)->useClassSuffix(); } ])->run()->send();
取消别名路由
因为使用场景有限和性能开销问题,取消原来的别名路由功能,建议使用资源路由或者单独的路由替代。
取消快捷路由
因为使用场景有限和不太符合规范,取消了原来的控制器快捷路由功能。
取消空操作功能
建议使用分组MISS路由功能替代。
应用类库后缀规范
取消了 controller_suffix
和 class_suffix
配置参数,App类增加了 controllerSuffix
方法用于开启控制器类库的 Controller
后缀(默认不开启)。其它应用类库的后缀由项目自己决定,框架不再强制规范。
需要注意的是,如果你的模型类命名使用了 Model
后缀的话,一定要定义 name
属性或者 table
属性。
异常响应输出类型
增加 exception_response_type
配置参数用于设置异常响应输出的类型,默认为 html
类型。如果你的应用全部用于接口开发,可以配置为 json
类型。
更新日志
路由
-
路由检测作为
AppInit
事件响应独立出App类,可配置事件定义文件不使用路由功能 -
路由定义的方法简化
option
和pattern
参数,统一使用方法进行路由参数和变量规则设置 -
取消别名路由和快捷路由功能
-
取消多级控制器的自动搜索功能
-
路由分组不再支持数组方式定义分钟下面的路由规则
-
取消路由的
mergeExtraVars
方法和设置 -
提升路由变量替换的性能
-
判断路由规则定义添加对请求类型的判断
-
路由地址支持
Dispatch
对象
数据库和模型
-
改进模型的数据类型强制转换对
Expression
对象的支持 -
模型查询统一返回对象 取消
findOrEmpty
方法 模型类增加isEmpty
方法 -
增加
raw
助手函数 -
修正
mysql
的regexp
查询 -
改进聚合查询方法的
field
参数支持Expression
-
where
方法支持传入Query
对象 -
改进
Connection
类getRealSql
方法 -
Query类
cache
方法支持传入CacheItem
类 -
Query类
find/select/cursor
方法不再支持闭包 -
模型增加
lazySave
方法 用于延迟自动保存 -
统一模型数据的读取和写入,支持驼峰和下划线自动智能识别
-
取消数据库的分表功能支持
-
改进
join
方法支持参数绑定 -
取消
setInc
/setDec
方法和setField
方法 -
模型增加
strict
属性 支持开启字段区分大小写 默认不区分,数据库字段强制使用小写 -
取消查询方法的
eq neq lt gt elt egt
等表达式 -
统一模型事件为使用模型事件观察者 废弃
event
方法注册模型事件 -
增加
after_read
模型事件 -
增加
whereYear
/whereMonth
/whereDay
查询方法 -
Query类
query
方法支持查询缓存 -
增加
procedure
方法用于指定是否为存储过程调用 -
简化
cursor
、query
和execute
方法参数 -
废弃数据库执行次数 合并到查询次数
-
Connection类
getCursor
方法调整 取消relation
参数 -
取消一对一关联的
setEagerlyType
方法 -
改进软删除
destory
方法重复执行事件的问题 -
修正多对多中间表的写入
-
改进关联模型的
save
方法 -
增加乐观锁
Trait
控制器
-
取消
ActionBegin
事件 -
改进控制器中间件执行
-
修正控制器名称获取
-
改进App类的
useClassSuffix
方法的默认值 -
取消
controller_suffix
配置,改用App类的controllerSuffix
方法设置 -
取消
url_controller_layer
配置,改用App类的controllerLayer
方法设置 -
取消
class_suffix
配置 -
取消
App
类的action
方法 -
取消
empty_controller
配置,改用App
类的emptyController
方法设置 -
取消空操作
缓存
-
改进缓存
CacheItem
类增加expire
和tag
方法支持 -
改进
CacheItem
类getExpire
方法 -
改进
CacheItem
的缓存有效期处理 -
改进缓存类的
remember
方法 -
FIX:当使用
complex
缓存的时候,通过store
方法选择驱动,提供给connect
的参数类型错误 -
改进 Redis 缓存驱动的
tag
支持 -
改进
Redis
驱动 -
改进缓存类 取消
xcache
驱动 -
改进缓存标签的获取
-
增加缓存序列化的闭包支持
验证
-
改进
unique
验证方法 -
改进验证类的自定义验证正则
-
验证方法调整
-
增加
validate
助手函数
其它
-
改进
Cookie
类的setCookie
方法 -
App
类增加classBaseName
方法 -
改进
Url
生成的端口问题 -
修正
Request
类param
方法 -
语言检测、路由检查、请求缓存功能独立作为事件响应
-
Request
增加单独的middleware
方法传递中间件变量 -
取消
App
类的log
方法 -
增加
exception_response_type
配置参数
以上所述就是小编给大家介绍的《ThinkPHP 发布 5.2 Beta3 版本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- IJPay 0.8 版本发布,兼容低版本 JDK
- fastjson 1.2.55 版本发布,Bug 修复版本
- Apache Ignite 2.9.1 版本发布,小版本更新
- Swoole v4.6.1 版本发布,Bug 修复版本
- Swoole v4.6.2 版本发布,Bug 修复版本
- Swoole v4.6.4 版本发布,Bug 修复版本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法竞赛入门经典
刘汝佳 / 清华大学出版社 / 2009-11 / 24.00元
《算法竞赛入门经典》是一本算法竞赛的入门教材,把C/C++语言、算法和解题有机地结合在了一起,淡化理论,注重学习方法和实践技巧。全书内容分为11章,包括程序设计入门、循环结构程序设计、数组和字符串、函数和递归、基础题目选解、数据结构基础、暴力求解法、高效算法设计、动态规划初步、数学概念与方法、图论模型与算法,覆盖了算法竞赛入门所需的主要知识点,并附有大量习题。书中的代码规范、简洁、易懂,不仅能帮助......一起来看看 《算法竞赛入门经典》 这本书的介绍吧!