ThinkPHP 发布 5.2 Beta3 版本

栏目: 软件资讯 · 发布时间: 7年前

内容简介:本次更新了大量的细节,进一步统一和精简了用法,并且新增了一些功能。 在正式版发布之前,不建议用于正式项目,目前也还没有完善的文档和详细的测试。 主要更新 相比较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_suffixclass_suffix配置参数,App类增加了controllerSuffix方法用于开启控制器类库的Controller后缀(默认不开启)。其它应用类库的后缀由项目自己决定,框架不再强制规范。

需要注意的是,如果你的模型类命名使用了Model后缀的话,一定要定义name属性或者table属性。

异常响应输出类型

增加exception_response_type配置参数用于设置异常响应输出的类型,默认为html类型。如果你的应用全部用于接口开发,可以配置为json类型。

更新日志

路由

  • 路由检测作为AppInit事件响应独立出App类,可配置事件定义文件不使用路由功能

  • 路由定义的方法简化optionpattern参数,统一使用方法进行路由参数和变量规则设置

  • 取消别名路由和快捷路由功能

  • 取消多级控制器的自动搜索功能

  • 路由分组不再支持数组方式定义分钟下面的路由规则

  • 取消路由的mergeExtraVars方法和设置

  • 提升路由变量替换的性能

  • 判断路由规则定义添加对请求类型的判断

  • 路由地址支持Dispatch对象

数据库和模型

  • 改进模型的数据类型强制转换对Expression对象的支持

  • 模型查询统一返回对象 取消findOrEmpty方法 模型类增加isEmpty方法

  • 增加raw助手函数

  • 修正mysqlregexp查询

  • 改进聚合查询方法的field参数支持Expression

  • where方法支持传入Query对象

  • 改进ConnectiongetRealSql方法

  • 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方法用于指定是否为存储过程调用

  • 简化cursorqueryexecute方法参数

  • 废弃数据库执行次数 合并到查询次数

  • 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类增加expiretag方法支持

  • 改进CacheItemgetExpire方法

  • 改进CacheItem的缓存有效期处理

  • 改进缓存类的remember方法

  • FIX:当使用complex缓存的时候,通过store方法选择驱动,提供给connect的参数类型错误

  • 改进 Redis 缓存驱动的tag支持

  • 改进Redis驱动

  • 改进缓存类 取消xcache驱动

  • 改进缓存标签的获取

  • 增加缓存序列化的闭包支持

验证

  • 改进unique验证方法

  • 改进验证类的自定义验证正则

  • 验证方法调整

  • 增加validate助手函数

其它

  • 改进Cookie类的setCookie方法

  • App类增加classBaseName方法

  • 改进Url生成的端口问题

  • 修正Requestparam方法

  • 语言检测、路由检查、请求缓存功能独立作为事件响应

  • Request增加单独的middleware方法传递中间件变量

  • 取消App类的log方法

  • 增加exception_response_type配置参数


以上所述就是小编给大家介绍的《ThinkPHP 发布 5.2 Beta3 版本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Dive Into Python 3

Dive Into Python 3

Mark Pilgrim / Apress / 2009-11-6 / USD 44.99

Mark Pilgrim's Dive Into Python 3 is a hands-on guide to Python 3 (the latest version of the Python language) and its differences from Python 2. As in the original book, Dive Into Python, each chapter......一起来看看 《Dive Into Python 3》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器