ThinkPHP实战
上QQ阅读APP看书,第一时间看更新

2.1 配置类型

在ThinkPHP中,配置文件都是自动加载的(也就是不用显示require),加载顺序为:

默认配置公共配置模式配置调试配置场景配置模块配置扩展配置动态配置。

加载顺序优先级从左往右依次递增,也就是说“动态配置”是最高优先级,如果左边的配置和右边有重复,系统会使用右边的值。

2.1.1 默认配置

默认配置是ThinkPHP“大道至简,开发由我”宗旨的核心体现,旨在减少开发者的编码工作而设计的。默认情况下,该配置文件路径为ThinkPHP/Conf/convention.php,对于一个新的Web项目,除了数据库配置可能要自定义之后,几乎不需要额外的配置定义。

2.1.2 公共配置

所谓公共配置,指的是一个应用下的所有模块都会加载的配置文件。默认情况下,公共配置的文件路径为Application/Common/Conf/config.php。

2.1.3 模式配置

在第1章中介绍过模式,这里就不赘述了,举个例子,我们在本地开发代码的环境一般是自己搭建的PHP环境(本书中为UPUPW集成环境),权限都是很开放的。但是如果项目部署到云服务器上可能就会运行错误了,国内大部分云服务器都不可以本地写文件,ThinkPHP默认的Runtime机制就会失效。另一个例子是关于数据库的,SAE云引擎为了数据库的安全性,MySQL连接信息全部以常量定义,该常量是通过改变PHP环境的参数设置的,如果在本地使用该参数也会出错,ThinkPHP没有模式定义的时候,开发者就需要特别小心配置文件的模式了,如果不小心把本地配置上传到服务器将会导致网站直接出错,所以ThinkPHP推出了“运行模式”配置。模式配置的文件路径为Application/Common/Config/config_模式名称.php,如Application/Common/Config/config_sae.php。

2.1.4 调试配置

Web程序在正式上线都是在本地开发调试的,有时候本地开发需要使用本地数据库,服务器上需要使用线上数据库,为了避免冲突问题,ThinkPHP也定义了“调试配置”功能,可以方便地配置调试模式下的各项参数,例如显示页面请求信息的SHOW_PAGE_TRACE参数,本地开发时将其设置为true,提交到服务器时设置为false就可以实现开发和线上的隔离。默认情况下,调试配置的文件路径为Application/Common/Config/debug.php。

2.1.5 场景配置

试想这么一个场景,笔者有个项目需要在公司和家里都进行开发,家里安装的是MySQL数据库,而公司安装的是SQL Server数据库。为了在这两种情况下都进行正常开发,笔者需要经常改变数据库配置,为了解决这个问题,ThinkPHP还提供了一种“场景配置”,在入口文件中定义应用场景,代码如下:

   define('APP_STATUS', 'company'); //公司

ThinkPHP就会自动加载Application/Common/Conf/company.php文件。

如果在家里开发,在入口文件中则可以如下定义:

   define('APP_STATUS', 'home'); //家里

ThinkPHP就会自动加载Application/Common/Conf/home.php文件。

与模式不同,场景只会影响配置文件的加载,而模式会影响整个应用,例如临时文件的写入等。

2.1.6 模块配置

每个模块都会自动加载本模块的配置文件,默认情况下,模块配置的文件路径为Application/模块名/Conf/config.php。

每个模块支持独立的模式配置和场景配置。

2.1.7 扩展配置

假设有这么一个Web项目,后台账户采用配置文件方式而不是数据库方式进行储存,按照上文的思想,需要用配置文件保存该账号信息,但是将该数据直接写在主配置文件中(本文默认公共配置文件)似乎不妥(按照解耦原则,该文件已经单独存放),这时候可以新建一个admin_user.php文件专门用来存放后台账户信息,在主配置文件中加载即可。

2.1.8 动态配置

假设我们在主配置文件中配置请求超时时间为10秒,但是遇到耗时操作时,10秒的时间脚本可能仍未运行完毕(例如在浏览器中进行数据库的备份操作),这时候会导致脚本异常终止,有损用户体验,此时我们可以通过ThinkPHP的配置操作函数临时更改超时时间,操作结束后再设置回原值。