在用tp5搭建后台的时候,要自定义一个扩展配置文件来实现后台配置网站信息,例如名称等等。所以使用了扩展配置文件,在application\extra下面放了一个basic_info.php,basic_info.php内容如下
<?php
/**
* 网站基本信息文件.
* 由Extra_Config函数建立.
* 2020/12/05 19:58:05
*/
return [
'WEB_TITLE' => '11',
'WEB_KEYWORD' => '11',
'WEB_COPYRIGHT' => '11',
'WEB_DESCRIPTION' => '11',
];
?>
但在读取的时候问题来了
我获取的时候:
// 在控制器中获取网站名称:
\think\Config::get('WEB_TITLE');
Config::get('WEB_TITLE');
Config::get('WEB_TITLE');
//模板里面使用:
{$Think.config.WEB_TITLE}
打印后都为空
我慌了啊,慌的一批,啥情况啊,还能不能好好玩耍了
然后经过苦心研究,各方参考
得出原因:上面的获取方法,是直接获取主配置里面的信息,而不是获取扩展配置里面的信息。
主配置在:application/config.php文件中
扩展配置在:application/extra 文件夹下面建立文件
所以总结下面三个方法:
1. 使用你文件的命名去调用
\think\Config::get('basic_info.WEB_TITLE');
Config::get('basic_info.WEB_TITLE');
Config('basic_info.WEB_TITLE');
//模板里面使用:
{$Think.config.basic_info.WEB_TITLE}
//获取全部
\think\Config::get('basic_info');
Config::get('basic_info');
Config('basic_info');
//获取所有config
\think\Config::get();
Config::get();
2. 扩展配置合并至主配置(第一种)
修改 \thinkphp\library\think\App.php
// 读取扩展配置文件
if (is_dir(CONF_PATH . $module . 'extra')) {
$dir = CONF_PATH . $module . 'extra';
$files = scandir($dir);
foreach ($files as $file) {
if ('.' . pathinfo($file, PATHINFO_EXTENSION) === CONF_EXT) {
$filename = $dir . DS . $file;
Config::load($filename, pathinfo($file, PATHINFO_FILENAME)); // 修改这一行代码
}
}
}
将 Config::load($filename, pathinfo($file, PATHINFO_FILENAME));
修改为:Config::load($filename);
不给他指定配置名称。
3. 扩展配置合并至主配置(第二种)
第一步:application/config.php
主配置文件中定义
// 注意,一定要在主配置文件中定义,即application/config.php文件中
'extra_config_merge'=>true,
修改 \thinkphp\library\think\App.php
// 读取扩展配置文件
if (is_dir(CONF_PATH . $module . 'extra')) {
$dir = CONF_PATH . $module . 'extra';
$files = scandir($dir);
foreach ($files as $file) {
if ('.' . pathinfo($file, PATHINFO_EXTENSION) === CONF_EXT) {
$filename = $dir . DS . $file;
Config::load($filename, pathinfo($file, PATHINFO_FILENAME)); // 修改这一行代码
}
}
}
第二步:将 Config::load($filename, pathinfo($file, PATHINFO_FILENAME));
修改为:Config::load($filename, Config::get('extra_config_merge') ? '' : pathinfo($file, PATHINFO_FILENAME));
用方法二和方法三则可以直接使用下面方法获取配置
\think\Config::get('WEB_TITLE');
Config::get('WEB_TITLE');
//模板里面使用:
{$Think.config.WEB_TITLE}
application\extra 相关的扩展配置的详细使用方式,请看我的这篇文章:点击跳转