企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
`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版本 ``` <pre class="calibre18"> ``` M(<span class="hljs-string">'User'</span>)->where([<span class="hljs-string">'name'</span>=><span class="hljs-string">'thinkphp'</span>])->find(); ``` ``` ### 5.0版本 ``` <pre class="calibre18"> ``` db(<span class="hljs-string">'User</span>')-><span class="hljs-keyword">where</span>(<span class="hljs-string">'name</span><span class="hljs-string">','</span>thinkphp')->find(); ``` ``` 主要改进如下: - 支持链式查询操作; - 数据查询支持返回对象、数组和`PDOStatement`对象; - 数据集查询支持返回数组和`Collection`对象; - 增加查询构造器,查询语法改变; - 支持闭包查询; - 支持分块查询; - 支持视图查询; - 增加SQL监听事件; ## 模型 `5.0`的模型变化是最大的,基本上模型是完全面向对象的概念,包括关联模型,模型类的后缀不再带`Model`,直接由命名空间区分,原来的`D`函数调用改为`model`函数,并且必须创建对应的模型类,例如: ### 3.2版本 ``` <pre class="calibre18"> ``` D(<span class="hljs-string">'User'</span>)->where([<span class="hljs-string">'name'</span>=><span class="hljs-string">'thinkphp'</span>])->find(); ``` ``` ### 5.0版本 ``` <pre class="calibre18"> ``` model(<span class="hljs-string">'User</span>')-><span class="hljs-keyword">where</span>(<span class="hljs-string">'name</span><span class="hljs-string">','</span>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`类的相关属性或者方法来完成,或者自己重新定义需要的常量。 废除的常量包括: ``` <pre class="calibre18"> ``` REQUEST<span class="hljs-operator">_METHOD IS_</span>GET IS<span class="hljs-operator">_POST IS_</span>PUT IS<span class="hljs-operator">_DELETE IS_</span>AJAX <span class="hljs-operator">__EXT__</span> COMMON<span class="hljs-operator">_MODULE MODULE_</span>NAME CONTROLLER<span class="hljs-operator">_NAME ACTION_</span>NAME APP<span class="hljs-operator">_NAMESPACE APP_</span>DEBUG MODULE_PATH ``` ``` ## 函数 `5.0`版本核心框架不依赖任何自定义函数,但仍然封装了一些常用功能到助手函数,你可以随意重新定义或者增加助手函数。