thinkphp5.0与thinkphp3.2之间的区别
5.0
版本和之前版本的差异较大,本篇对熟悉3.2
版本的用户给出了一些5.0
的主要区别。
URL和路由
5.0
的URL访问不再支持普通URL
模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式:
主要改进如下;
- 增加路由变量规则;
- 增加组合变量支持;
- 增加资源路由;
- 增加路由分组;
- 增加闭包定义支持;
- 增加MISS路由定义;
- 支持URL路由规则反解析;
请求对象和响应对象
5.0
新增了请求对象Request
和响应对象Response
,Request
统一处理请求和获取请求信息,Response
对象负责输出客户端或者浏览器响应。
模块和控制器
控制器的命名空间有所调整,并且可以无需继承任何的控制器类。
- 应用命名空间统一为
app
(可定义)而不是模块名; - 控制器的类名默认不带
Controller
后缀,可以配置开启use_controller_suffix
参数启用控制器类后缀; - 控制器操作方法采用
return
方式返回数据 而非直接输出; - 废除原来的操作前后置方法;
- 增加
beforeActionList
属性定义前置操作; - 支持任意层次的控制器定义和访问;
- URL访问支持自动定位控制器;
数据库
5.0的数据库查询功能增强,原先需要通过模型才能使用的链式查询可以直接通过Db
类调用,原来的M
函数调用可以改用db
函数,例如:
3.2版本
M('User')->where(['name'=>'thinkphp'])->find();
5.0版本
db('User')->where('name','thinkphp')->find();
主要改进如下:
- 支持链式查询操作;
- 数据查询支持返回对象、数组和
PDOStatement
对象; - 数据集查询支持返回数组和
Collection
对象; - 增加查询构造器,查询语法改变;
- 支持闭包查询;
- 支持分块查询;
- 支持视图查询;
- 增加SQL监听事件;
模型
5.0
的模型变化是最大的,基本上模型是完全面向对象的概念,包括关联模型,模型类的后缀不再带Model
,直接由命名空间区分,原来的D
函数调用改为model
函数,并且必须创建对应的模型类,例如:
3.2版本
D('User')->where(['name'=>'thinkphp'])->find();
5.0版本
model('User')->where('name','thinkphp')->find();
主要改进包括:
- 重构关联模型;
- 支持聚合模型;
- 废除视图模型(改为数据库的视图查询方法);
- 模型的扩展采用
Trait
机制; - 增加获取器和修改器;
- 增加时间戳自动写入;
- 增加类型字段转换;
- 数组访问支持;
- JSON序列化支持;
自动验证和自动完成
5.0的数据自动验证和自动完成和3.2版本区别较大,5.0的数据验证采用验证器定义并且通过think\Validate
类进行统一的验证。自动完成则通过在模型里面定义修改器来完成。
异常
5.0
对错误零容忍,默认情况下会对任何级别的错误抛出异常(但可以在应用公共文件中设置错误级别),并且重新设计了异常页面,展示了详尽的错误信息,便于调试。
调试和日志
5.0
的页面Trace
强化,支持浏览器控制台查看Trace信息。
5.0
的日志驱动增加Socket
方式,采用SocketLog
支持远程调试。
常量
5.0
版本废弃了原来的大部分常量定义,仅仅保留了框架的路径常量定义,其余的常量可以使用App
类或者Request
类的相关属性或者方法来完成,或者自己重新定义需要的常量。
废除的常量包括:
REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__ COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE APP_DEBUG MODULE_PATH
函数
5.0
版本核心框架不依赖任何自定义函数,但仍然封装了一些常用功能到助手函数,你可以随意重新定义或者增加助手函数。
thinkphp5.0与thinkphp3.2之间的区别的更多相关文章
- 【转载】python3.0与2.x之间的区别
python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好 ...
- python3.0与2.x之间的区别
python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好 ...
- thinkphp5.0和thinkphp3.2的区别不同之处
先看目录结构: thinkphp 5.0的目录结构, 文档:https://www.kancloud.cn/manual/thinkphp5/118008 project 应用部署目录 ├─appli ...
- HTML4.01和XHTML1.0和XHTML1.1的一些区别
接触web前端以来,一直使用的都是html5,因此一直没搞明白HTML4.01和XHTML1.0和XHTML1.1之间的区别,今天在看<精通CSS>一书,有简单介绍这几个,在这儿记录下. ...
- 深入理解 '0' "0" '\0' 0 之间的区别
看来基础还是很重要的,基础不扎实就难以学好c语言,就别说写出高质量的c语言代码了.今天,我就被这个问题折磨的不行了,哈哈,不过现在终于明白了‘\0’ ,‘0’, “0” 之间的区别了.困惑和快乐与你分 ...
- 深入理解c语言——‘\0’ ,‘0’, “0” ,0之间的区别
看来基础还是很重要的,基础不扎实就难以学好c语言,就别说写出高质量的c语言代码了.今天,我就被这个问题折磨的不行了,哈哈,不过现在终于明白了‘\0’ ,‘0’, “0” 之间的区别了.困惑和快乐与你分 ...
- display:none;visibility:hidden;opacity:0;之间的区别
什么是回流 当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建.这就称为回流(reflow).每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是 ...
- [转]ExtJs基础--Html DOM、Ext Element及Component三者之间的区别
要学习及应用好Ext框架,必须需要理解Html DOM.Ext Element及Component三者之间的区别. 每一个HTML页面都有一个层次分明的DOM树模型,浏览器中的所有内容都有相应的DOM ...
- javascrip中parentNode和offsetParent之间的区别
首先是 parentNode 属性,这个属性好理解,就是在 DOM 层次结构定义的上下级关系,如果元素A包含元素B,那么元素B就可以通过 parentElement 属性来获取元素A. 要明白 off ...
随机推荐
- jQuery中的text(),html(),val()的区别
一.jquery中HTML 1. 无参html() 方法用来获取任意元素的HTML内容,如果你调用多个选定元素的.html()方法,那么其读取的只是第一个元素,换句话说:如果选择器匹配多于一个的元素, ...
- @Controller,@Service,@Repository,@Component详解
@Controller 用来表示一个web控制层bean,如SpringMvc中的控制器. @Service 用来表示一个业务层bean. @Repository 用来表示一个持久层bean,即数据访 ...
- JavaScript语法对{}的奇葩处理
JavaScript的语法有多坑,算是众人皆知了. 今天看到vczh的这条微博:http://weibo.com/1916825084/B7qUFpOKb , 代码如下: {} + []; [] + ...
- ArchLinux升级后deadbeef无法正常启动的解决办法
deadbeef是一款简约而不简单的音乐播放器, 占资源少, 支持的格式却不少. 昨天对ArchLinux进行了一次全面升级, 经历种种惊险, 终于跨越了从 glibc-2.16 到 glibc-2. ...
- for-in 和 for
本文地址:http://www.cnblogs.com/veinyin/p/8745845.html 1 for for ( var i = 0 ; i < len ; i++ ) for 是 ...
- KMP初探·总结
昨天自己乱搞了一天kmp之后终于弄懂了kmp 的基本原理. 早上看见了好多只讲原理和数学公式推导的博客,感觉很坑,无法理解.后来找到了一篇图文并茂的博客,感觉很快就理解了. KMP的精髓在于n ...
- 【比赛游记】THUSC2018酱油记
day -1 早上4:30就要起来去飞机场…… 7点的飞机,10:30就到北京了. 北京的街景并没有我想像的漂亮……大概是因为我在四环外〒▽〒 晚上还有CF div3场,果断的去水了,因为太累就没有打 ...
- Cesium entity click
var url = 'http://202.107.245.51:81/user/dev/api/v2/sql?rows_per_page=40&page=0&sort_order=a ...
- 四、Springboot Debug调试
描述: 在使用maven插件执行spring-boot:run进行启动的时候,如果设置的断点进不去,要进行以下的设置. 1.添加jvm参数配置 在spring-boot的maven插件加上jvmArg ...
- C# Guid 16位 唯一
public static class GuidExtentions { /// <summary> /// 根据GUID获取16位的唯一字符串 /// </summary> ...