下面是“ThinkPHP公共配置文件与各自项目中配置文件组合的方法”的攻略:
一、ThinkPHP公共配置文件
ThinkPHP公共配置文件放在/thinkphp/library/think/config.php
目录下,这个文件中定义了大量的全局的配置项,比如:
return [
'app_debug' => false,
'app_trace' => false,
'default_lang' => 'zh-cn',
'default_return_type' => 'html',
'http_exception_template'=> [],
'show_error_msg' => false,
// ...其它配置项
];
上述配置文件中return
数组中的键值即为配置项,每个配置项都有一个默认值,当你需要进行更改时,只需要在项目配置文件中加入对应的项即可覆盖默认值。
二、各自项目中的配置文件
ThinkPHP的项目配置文件为/application/config.php
,同样也是一个return
数组,可以覆盖公共配置文件中的设置。例如:
return [
// 数据库配置信息
'database' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'testdb',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
],
'url_route_on' => true,
'url_route_must' => false,
// ...其它配置项
];
上述配置文件为数据库配置,覆盖了公共配置文件中的database
配置项。当我们在代码中使用了数据库时,系统会默认获取这里的配置信息。
三、公共配置文件与项目配置文件组合方法
对于公共配置文件和项目配置文件,我们既可以分别用于存放不同的配置项,也可以对公共配置文件进行一些扩展,比如:
1. 合并公共配置文件和项目配置文件
当你希望公共配置文件中的某个项对所有项目都适用,但是某个项目有一些自定义配置时,可以合并这两个配置文件。方法如下:
// 引入公共配置文件
$public_config = include '/thinkphp/library/think/config.php';
// 引入当前项目配置文件
$site_config = include '/application/config.php';
// 合并两个数组
return array_merge($public_config, $site_config);
2. 使用环境变量
为了方便不同环境的配置,可以使用环境变量,例如:
return [
'database' => [
'type' => 'mysql',
'hostname' => getenv('DB_HOST') ?: '127.0.0.1',
'database' => getenv('DB_NAME') ?: 'testdb',
'username' => getenv('DB_USER') ?: 'root',
'password' => getenv('DB_PASS') ?: '',
'prefix' => 'think_',
'charset' => 'utf8',
],
// ...其它配置项
];
上述代码中使用了getenv()
函数读取了系统中的环境变量,如果环境变量不存在,使用默认值。
四、示例说明
下面以具体的示例说明公共配置文件与项目配置文件的用法:
1. 合并公共配置文件和项目配置文件
例如你有3个不同的项目,需要分别配置:
公共配置文件
// thinkphp/library/think/config.php
return [
'app_debug' => false,
'app_trace' => false,
'default_lang' => 'zh-cn',
'default_return_type' => 'html',
'http_exception_template'=> [],
'show_error_msg' => false,
];
项目A的配置文件
// application/config.php
return [
'database' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'testa',
'username' => 'root',
'password' => '',
'prefix' => 'think_',
'charset' => 'utf8',
],
];
项目B的配置文件
// application/config.php
return [
'database' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'testb',
'username' => 'root',
'password' => '',
'prefix' => 'think_',
'charset' => 'utf8',
],
];
项目C的配置文件
// application/config.php
return [
'database' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'testc',
'username' => 'root',
'password' => '',
'prefix' => 'think_',
'charset' => 'utf8',
],
];
然后我们在项目的入口文件/public/index.php
中引用配置文件:
// 引入公共配置文件
$config_public = include '../thinkphp/library/think/config.php';
// 引入当前项目配置文件
$config_site = include '../application/config.php';
// 合并两个配置文件
$config = array_merge($config_public, $config_site);
// 前面已经定义了常量APP_PATH了,所以这里使用define更改CONFIG_PATH
define('CONFIG_PATH', APP_PATH . "config/");
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
这样,在不同的项目中,我们依然可以使用公共配置文件中的配置项,也可以在自己的配置文件中添加项目的特有配置项。
2. 使用环境变量
例如,在开发环境和生产环境中,你的数据库配置不一样:
公共配置文件
// thinkphp/library/think/config.php
return [
// 其它配置项
'database' => [
'type' => 'mysql',
'hostname' => getenv('DB_HOST') ?: '127.0.0.1',
'database' => getenv('DB_NAME') ?: 'test',
'username' => getenv('DB_USER') ?: 'root',
'password' => getenv('DB_PASS') ?: '',
'prefix' => 'think_',
'charset' => 'utf8',
],
];
环境变量的设置方式可以参考操作系统的文档。在这里,我们假设在开发环境下,环境变量设置如下:
export DB_HOST=127.0.0.1
export DB_NAME=test_dev
export DB_USER=root
export DB_PASS=123456
在生产环境下,环境变量的值可以通过配置文件进行设置,例如:
export DB_HOST=example.com
export DB_NAME=test_prod
export DB_USER=admin
export DB_PASS=abcdef
然后,在框架的入口文件/public/index.php
中引用配置文件,配置文件中的getenv()
函数会获取系统中的环境变量:
// 引入公共配置文件
$config_public = include '../thinkphp/library/think/config.php';
// 引入当前项目配置文件
$config_site = include '../application/config.php';
// 合并两个配置文件
$config = array_merge($config_public, $config_site);
// 前面已经定义了常量APP_PATH了,所以这里使用define更改CONFIG_PATH
define('CONFIG_PATH', APP_PATH . "config/");
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
这样,在不同环境中,我们可以使用相同的代码,只需要在不同的环境中设置一下环境变量或者修改配置文件中的默认值即可。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ThinkPHP公共配置文件与各自项目中配置文件组合的方法 - Python技术站