ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括:
废除的功能:
ThinkPHP5的运行环境要求PHP5.6以上。
目录结构
初始的目录结构如下:
www WEB部署目录(或者子目录)
├─application 应用目录
│ ├─common 公共模块目录(可以更改)
│ ├─module_name 模块目录
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ … 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─tags.php 应用行为扩展定义文件
│
├─config 应用配置目录
│ ├─module_name 模块配置目录
│ │ ├─database.php 数据库配置
│ │ ├─cache 缓存配置
│ │ └─ …
│ │
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置
│
├─route 路由定义目录
│ ├─route.php 路由定义
│ └─… 更多
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─thinkphp 框架系统目录
│ ├─lang 语言文件目录
│ ├─library 框架类库目录
│ │ ├─think Think类库包目录
│ │ └─traits 系统Trait目录
│ │
│ ├─tpl 系统模板目录
│ ├─base.php 基础定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php 助手函数文件
│ ├─phpunit.xml phpunit配置文件
│ └─start.php 框架入口文件
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
目录结构的主要变化是配置目录和路由定义目录独立出来,不再放入应用类库目录。
升级指导
1、命名空间调整
如果你自定义了应用类库的命名空间,需要改为设置环境变量app_namespace
而不是应用配置文件。
如果你的应用类库中使用了下面的系统类库(主要涉及的类库是5.0静态调用的系统类库),那么命名空间需要调整如下:
|5.0系统|5.1系统|
|—|—|
| think\App | think\facade\App (或者 App )|
| think\Cache | think\facade\Cache (或者 Cache )|
| think\Config | think\facade\Config (或者 Config )|
| think\Cookie | think\facade\Cookie (或者 Cookie )|
| think\Debug | think\facade\Debug (或者 Debug )|
| think\Env | think\facade\Env (或者 Env )|
| think\Hook | think\facade\Hook (或者 Hook )|
| think\Lang | think\facade\Lang (或者 Lang )|
| think\Log | think\facade\Log (或者 Log )|
| think\Request | think\facade\Request (或者 Request )|
| think\Response | think\facade\Reponse (或者 Reponse )|
| think\Route | think\facade\Route (或者 Route )|
| think\Session | think\facade\Session (或者 Session )|
| think\Url | think\facade\Url (或者 Url )|
| think\View | think\facade\View (或者 View )|
举个例子,如果应用类库开头use
了 think\Url
use think\Url;
Url::build(‘index/index’);
则需要改成
use think\facade\Url;
Url::build(‘index/index’);
或者
use Url;
Url::build(‘index/index’);
5.1为系统的类库注册了类库别名,因此可以直接从根命名空间方式调用Url。
所以路由配置文件中你可以直接删除下面的一行代码
use think\Route;
2、配置文件调整
5.1的配置文件全部采用二级配置方式,所有的不带一级配置名的参数都会作为app
的二级配置,例如
config(‘app_debug’);
等同于
config(‘app.app_debug’);
一级配置app
下的配置参数都在app.php
配置文件中定义。
如果要获取一级配置下面的所有参数,使用
\think\facade\Config::pull(‘app’);
原有的配置文件config.php
按照模块拆分为app.php
、cache.php
等独立配置文件放入config
目录,系统默认的配置文件清单如下:
|配置文件|说明|
|—|—|
|app.php| 应用配置文件|
|cache.php|缓存配置文件|
|cookie.php|Cookie配置文件|
|database.php|数据库配置文件|
|log.php|日志配置文件|
|session.php|Session配置文件|
|template.php|模板引擎配置文件|
|trace.php|页面Trace配置文件|
原来的应用extra
目录下面的配置文件直接移动到config
目录下面。
原来模块的配置目录直接移动到config
目录下面后,然后参考上面的应用配置文件进行调整。
原有的路由定义文件route.php
移动到route
目录下面,如果有定义其它的路由配置文件,一样直接放入route
目录即可。
3、模型调整
为了确保模型的用法统一,对模型进行了一些调整,包括:
* 模型的数据集查询始终返回数据集对象而不再是数组;
* 模型的数据表主键如果不是id
,则必须设置模型的pk
属性;
* 软删除trait引入更改为 use think\model\concern\SoftDelete
;
* 聚合模型功能废除,使用关联模型配合关联自动写入功能替代,更灵活;
4、常量调整
5.1取消了所有的框架内置常量,如需获取,请使用App
类的内置方法获取,例如:
|5.0常量|5.1获取方法|
|—|—|
|EXT| 取消,固定使用 `.php`|
|IS_WIN|取消|
|IS_CLI|取消|
|ENV_PREFIX|取消,固定使用`PHP_`|
|THINK_START_TIME|App::getBeginTime()|
|THINK_START_MEM|App::getBeginMem()|
|THINK_VERSION| App::version()|
|THINK_PATH|App::getThinkPath()|
|LIB_PATH|App::getThinkPath() . ‘library/’|
|CORE_PATH|App::getThinkPath() . ‘library/think/’|
|APP_PATH|App::getAppPath()|
|CONFIG_PATH| App::getConfigPath()|
|CONFIG_EXT|App::getConfigExt()|
|ROOT_PATH|App::getRootPath()|
|EXTEND_PATH| App::getRootPath() . ‘extend/’ |
|VENDOR_PATH| App::getRootPath() . ‘vendor/’ |
|RUNTIME_PATH|App::getRuntimePath()|
|LOG_PATH| App::getRuntimePath() . ‘log/’ |
|CACHE_PATH| App::getRuntimePath() . ‘cache/’ |
|TEMP_PATH| App::getRuntimePath() . ‘temp/’ |
|MODULE_PATH|App::getModulePath()|
另外也可以通过Env
类的get
方法获取这些路径变量(不区分大小写),例如:
Env::get(‘root_path’);
5、其它注意事项
extra_file_list 配置参数无效,请自己在common.php文件中引入。
5.1版本取消Loader::import
方法以及import
和vendor
助手函数,推荐全面采用命名空间方式的类以及自动加载机制,如果必须使用请直接改为php内置的include
或者require
语法。
为了保持Loader
类库的单纯性,原Loader
类的controller
、model
、action
和validate
方法改为App
类的同名方法。
路由类库进行了重构和拆分,在使用上更加对象化,同时为了简化方法调用,原来的before_behavior
和after_behavior
参数更改为before
和after
,并且路由缓存功能暂时取消。
url_route_on
配置参数无效,会始终检查路由,没有定义路由的情况下默认解析方式依然有效。