ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括:
+ 引入容器和Facade支持
+ 依赖注入完善
+ 对象化的路由
+ 配置和路由目录独立
+ 取消系统常量
+ 助手函数增强
+ 类库别名机制
+ 模型和数据库增强
+ 支持PSR-3日志规范
废除的功能:
+ 聚合模型
+ 内置控制器扩展类
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`
usethink\Url;
Url::build(‘index/index’);
则需要改成
usethink\facade\Url;
Url::build(‘index/index’);
或者
useUrl;
Url::build(‘index/index’);
5.1为系统的类库注册了类库别名,因此可以直接从根命名空间方式调用Url。
所以路由配置文件中你可以直接删除下面的一行代码
usethink\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`配置参数无效,会始终检查路由,没有定义路由的情况下默认解析方式依然有效。