内容简介:本次更新了大量的细节,进一步统一和精简了用法,并且新增了一些功能。 在正式版发布之前,不建议用于正式项目,目前也还没有完善的文档和详细的测试。 主要更新 相比较beta2版本(Beta2版本更新参考这里),除了...
本次更新了大量的细节,进一步统一和精简了用法,并且新增了一些功能。
在正式版发布之前,不建议用于正式项目,目前也还没有完善的文档和详细的测试。
主要更新
相比较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\OptimLockTrait用于方便引入扩展模型的乐观锁功能。
<?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参数支持Expressionwhere方法支持传入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 修复版本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
《生活大爆炸》之科学揭秘
乔治·毕姆 / 韩准、徐漪、江业华、叶夜 / 世界图书出版公司 / 2012-12 / 49.00元
《 之科学揭秘:GEEK探索频道》对流行美剧《生活大爆炸》进行“深度解密”,重点在解读剧中涉及的流行文化及科学元素。正如我们所知,《生活大爆炸》是一部“技术含量很高”的肥皂剧。不光是普通观众,科学家也爱《生活大爆炸》。《 之科学揭秘:GEEK探索频道》中,科学家详尽为你解释了电视剧中出现的科学道理和典故。包括谢尔顿的高深弦理论、霍华德的花生过敏是怎么回事、如果你和谢尔顿的妈妈有同样的信仰该如何看待......一起来看看 《《生活大爆炸》之科学揭秘》 这本书的介绍吧!