0

0

图解ThinkPHP5框架(四):一张图彻底吃透框架配置(终结版)

天蓬老师

天蓬老师

发布时间:2017-05-18 18:09:40

|

11201人浏览过

|

来源于php中文网

原创

本课共分10个模块,从配置文件格式(php/ini/json/xml)到场景配置,模块配置,扩展配置,独立配置,动态配置,自定义配置加载,环境变量变量,全景展现一个多彩的thinkphp5配置世界~~。

请将图打开到新网页查看,效果更好。或者下载到本地查看。本图由xmind思维导图制作,底部有xmind源文件下载,用xmind软件打开效果更棒。

一、思维导图:

ThinkPHP5框架配置.png

二、文件描述:

立即学习PHP免费学习笔记(深入)”;

ThinkPHP5框架配置

1 配置目录

1.1 默认配置目录

1.1.1 应用配置:application目录

1.1.2 模块配置: application/模块目录

1.2 自定义配置目录

1.2.1 入口文件中:define('CONF_PATH', __DIR__.'/../config/');

1.2.2 定义用户自定义配置文件目录和应用目录同级

1.2.3 应用配置文件包括三个:config.php/database.php/route.php

1.2.4 模块配置文件包括三个:config.php/database.php

1.2.5 路由在应用初始化时已生成,所以不要在模块中配置route.php

1.3 扩展配置目录

1.3.1 在应用或模块配置目录下创建extra目录

1.3.2 在extra目录下创建的配置文件名,就是扩展配置名称,所以扩展配置都是二维数组

1.在extra目录创建:myconf.php

2.在myconf.php文件中:

'www.php.cn',
];

3. 在控制器中访问:

dump(\think\Config::get());

可以在最后面看到:

["myconf"] => array(1) {
    ["site_name"] => string(10) "www.php.cn"
  }

1.3.3 最终创建的扩展配置项,都会与应用配置项合并(dump(\think\Config::get());//查看)

2 配置格式

2.1 Array格式

2.1.1 这是默认格式,不用在入口文件中配置CONF_EXT常

2.1.2 配置文件:config.php,内容是用return 返回的数组

 '朱老师',
];

2.1.3 支持二配置,以二维数组表示

 [
      'my_name' => '朱老师',
      'my_age' => 28,
      'my_sex' => '男',
  ],
];

2.1.4 返回内容自动与应用配置合并,以数组方式返回

["my_info"] => array(3) {
    ["my_name"] => string(9) "朱老师"
    ["my_age"] => int(28)
    ["my_sex"] => string(3) "男"
  }

2.2 ini格式

2.2.1 在入口文件中更改配置格式: define('CONF_EXT', '.ini');

2.2.2 配置文件:config.ini,内容是由等号连接的名值对组成, 注释写在分号;后面

名称用匈牙利命名法,名值之间用等号连接,值不用定界符号

config.ini
内容:
my_name=朱老师 ;我的姓名
;my_name是配置名称,朱老师是值,分号后面是该配置项的注释部分,可以省略

2.2.3 支持二级配置,配置项放在一对方括号中

config.ini中的二级配置内容

[base_info]
my_name=朱老师;我的姓名
my_age=28 ;我的年龄
my_sex=男 ;我的性别

2.2.4 返回内容自动与应用配置合并,以数组方式返回

应用配置中返回结果是二维数组:

["base_info"] => array(3) {
    ["my_name"] => string(9) "朱老师"
    ["my_age"] => string(2) "28"
    ["my_sex"] => string(3) "男"
  }

2.3 xml格式

2.3.1 在入口文件中更改配置格式: define('CONF_EXT', '.xml');

2.3.2 配置文件:config.xml,配置项放在一对标签中,标签名就是配置项


   安徽省合肥市





   安徽省合肥市

2.3.3 支持二级配置,配置项放在一对标签中



   安徽省合肥市
   中文网

2.3.4 返回内容自动与应用配置合并,以数组方式返回

应用配置中返回结果是二维数组:

["info"] => array(2) {
    ["my_home"] => string(18) "安徽省合肥市"
    ["my_work"] => string(9) "中文网"
  }

2.4 json格式

2.4.1 在入口文件中更改配置格式: define('CONF_EXT', '.json');

2.4.2 配置文件:config.json,配置项放在json对象中,配置项的名值对用javascript对象表示

{
  "my_name":"朱老师",
  "my_age":28,
  "my_sex":"男"
}

特别注意:最后一个配置项后面,千万不要加逗号

2.4.3 支持二级配置,配置项放在一对标签中

{
  "base_info":{
    "my_name":"朱老师",
    "my_age":28,
    "my_sex":"男"
  }
}

很简单,在所有配置上的上一级再加一层,再把当前数据嵌套进去就可以了。

2.4.4 返回内容自动与应用配置合并,以数组方式返回

["base_info"] => array(3) {
    ["my_name"] => string(9) "朱老师"
    ["my_age"] => int(28)
    ["my_sex"] => string(3) "男"
  }

3 场景配置

3.1 用途:在不同的环境下,使用不同的配置项

3.2 修改应用配置config.php中'app_status'=>'场景名称',

这个场景名称,对应着应用配置目录下面一个配置文件,该配置文件内容默认是数组方式。

例如,你可能在家中工作,使用的数据库连接参数与办公室是不一样的。

那么你可以先将:

'app_status'=>'home',设置为home家中

同样,如果你到了公司,要换成公司的数据库,可以在应用配置文件中:

 'office',
];

3.3 在应用配置目录下创建与场景名称同名的php文件做为配置文件,以数组方式返回配置项

然后在当前应用配置目录下面创建一个:home.php文件

里面写上如下内容:

实际上就是database.php中的内容复制一份就行。

 'mysql',
    // 服务器地址
    'hostname'        => 'localhost',
    // 数据库名
    'database'        => 'home',
    // 用户名
    'username'        => 'root_home',
    // 密码
    'password'        => 'root_home',
    // 端口
    'hostport'        => '',
     // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => '',
    // 数据库调试模式
    'debug'           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => false,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 是否严格检查字段是否存在
    'fields_strict'   => true,
    // 数据集返回类型
    'resultset_type'  => 'array',
    // 自动写入时间戳字段
    'auto_timestamp'  => false,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 是否需要进行SQL性能分析
    'sql_explain'     => false,
     // Builder类
    'builder'         => '',
    // Query类
    'query'           => '\\think\\db\\Query',
];

 同样,如果你到了公司,要换成公司的数据库,

然后在应用配置目录下创建office.php文件,将数据库配置信息写入,以数据形式返回,就可以了。

美间AI
美间AI

美间AI:让设计更简单

下载

4 模块配置

4.1 模块也可以有自己的独立配置:模块名/config.php

4.2 模块配置优先于应用配置,相同配置会覆盖应用配置

4.3 模块也支持场景状态配置,原理与步骤与应用一致

1.创建模块配置文件: application/index/config.php

2. 添加配置项,修改应用状态

 'module_office',
];

3.在index模块目录下创建: modult_office.php,做为模块的场景状态配置文件

文件内容也以数据库连接为例:

 'mysql',
    // 服务器地址
    'hostname'        => 'localhost',
    // 数据库名
    'database'        => 'modult_office',
    // 用户名
    'username'        => 'modult_office',
    // 密码
    'password'        => 'modult_office',
    // 端口
    'hostport'        => '',
    // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => '',
    // 数据库调试模式
    'debug'           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => false,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 是否严格检查字段是否存在
    'fields_strict'   => true,
    // 数据集返回类型
    'resultset_type'  => 'array',
    // 自动写入时间戳字段
    'auto_timestamp'  => false,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 是否需要进行SQL性能分析
       'sql_explain'     => false,
    // Builder类
    'builder'         => '',
    // Query类
    'query'           => '\\think\\db\\Query',
];

    

4. 保存后,打开浏览器查看,可以看到配置更新结果

5 其它位置的配置文件

5.1 全部在控制器的方法中动态调用Config类中的方法完成手工加载

5.2 用Config::load(配置文件):可以加载任何位置的配置文件,默认Array格式

先在与config目录中创建同级的newconf目录,在该目录下创建conf.php,如果是.php文件,就默认是以数组方式返回配置项,采用Config::load()方法手工动态加载

config/newconf/conf.php文件内容

'www.php.cn'
];

控制器中的:index/index/中的index方法

5.3 如果是其它格式(ini/xml/json)用Config::parse(文件,'类型')来加载

先在与config目录中创建同级的newconf目录,在该目录下创建conf.ini,按框架的约定,不论是什么格式的配置文件,最终必须是以数组方式返回配置项,所以第一步就是要将其它格式的数组,解析成数组,所以就不能再用Config::load()方法了,Config类提供了一个Config::parse()方法来加载其它格式的配置文件,这个方法有二个参数,第一个是要加载的配置文件,第二个就是当前配置文件的格式,如ini,xml或json等

我们以ini格式为例

config/newconf/conf.ini文件内容

my_system = mac_os
my_phone = huawei

控制器中的:index/index/中的index方法

5.4 最终与前面一样,都是与应用配置合并后以数组方式返回全部配置项

["my_system"] => string(6) "mac_os"
  ["my_phone"] => string(6) "huawei"

6 读取配置项

6.1 方法1:Config::get('参数'),不传入参数则是读取应用的全部配置项

6.2 方法二:作用助手函数config(),不需要导入命名空间直接使用,效率低不推荐

6.3 Config::get('my_info.my_system')方法可以读取二级配置,配置项之间用.点连接

6.4 Config::has(''app_status''):has方法检测某个配置项是否存在,返回布尔值

在控制器中检测:某个配置项是否存在

6.5 如何用助手函数:config('?配置参数');也返回布尔值

7 动态设置参数

7.1 配置项可以写在配置文件,也可以用Config::set()方法动态设置

7.2 Config::set(名称,值),可以逐个设置,也可用数组批量设置:Config::set(数组)

一、名值对方式,逐个设置

二、数组方式,批量设置

 'www.php.cn',
      'site_name' => 'PHP中文网',
      'php_tools' => 'PHP程序员工具箱',
    ];
    Config::set($config);
    dump(Config::get());
  }
}

7.3 助手函数config(名值对/数组),也可以进行动态设置

将上面的用Config类的代码微微改一下就行,

去掉上面的空间导入

将Config::set()和Config::get()全部换成config()就可了。

 'www.php.cn',
      'site_name' => 'PHP中文网',
      'php_tools' => 'PHP程序员工具箱',
    ];
    config($config);
    dump(config());
  }
}

8 独立配置文件

8.1 5.0.1以上版本,直接将独立配置文件放在应用或模块的extra目录下即可

自动读取的独配置文件都是二级配置参数,一级配置名称就是扩展配置的文件名。

8.2 默认设置了2个独立配置文件,database.php(数据库配置) 和 validate.php(验证规 则) 

8.3 四类默认加载的独立配置文件不用放在extra目录下

8.3.1 应用或者模块配置文件:config.php

8.3.2 数据库配置文件:database.php

8.3.3 行为定义文件:tags.php

8.3.4 场景配置文件:例如home.php,office.php

9 配置参数的作用域

9.1 类似于命名空间,以二维数组方式来收纳参数

9.2 切换作用域: Config::range(),默认值为:_sys_

9.3 可以将扩展配置或独立配置归纳到作用域,或动态设置Config::set()

'peter',
      'user_age'=>28,
    ];
    //批量设置,写入user作用域
    Config::set($config,'user');
    //输出全部配置项,发现作用域相当于二维数组名称
    dump(Config::get());
    //用二维数组方式获取user作用域中的user_name值
    dump(Config::get('user.user_name'));
    //同样用数组的方式来设置配置项的值
      Config::set('user.user_name','php.cn');
      echo '
'; //查看设置好的新值 dump(Config::get('user.user_name')); //切换作用域到系统全局_sys_(默认):用 Config::range()方法 Config::range('_sys_'); //查看全部配置项 dump(Config::get()); } }

    10 系统环境变量配置

10.1 在应用同级目录创建.env文件来模拟系统变量,内容格式为:ini

app_status = office ;配置场景为office

10.2 原生方法:获取系统环境变量:$_ENV,getenv(变量名),

10.3 TP提供Env.php类,该类只有一个方法:Env::get(变量名)来获取环境变量

10.4 .env文件不支持非标量,如需使用数组,要用_下划线连接方式进行参数分级设置

注意,环境变量不支持数组参数,如果需要使用数组参数可以,使用下划线分割定义配置参数名:

database_username = database_password = root 123456
//或者使用
[database] username = password = root 123456

10.5 对于数组参数,访问时可以用下划线或者.点语法都可以

获取环境变量的值可以使用下面的两种方式获取:

Env::get('database.username'); Env::get('database.password'); 
// 同时下面的方式也可以获取
Env::get('database_username'); 
Env::get('database_password');

可以支持默认值,例如:

// 获取环境变量 如果不存在则使用默认值root Env::get('database.username','root');

10.6 环境变量读取优先于应用配置参数,所以可以配置参数中引用环境变量

可以直接在应用配置中使用环境变量,例如:

return [ 'hostname' => Env::get('hostname','127.0.0.1'), ];

三、思维导图下载:

图解ThinkPHP5框架(四):一张图彻底吃透框架配置(终结版)框架配置.zip

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

86

2025.12.26

压缩文件加密教程汇总
压缩文件加密教程汇总

本专题整合了压缩文件加密教程,阅读专题下面的文章了解更多详细教程。

50

2025.12.26

wifi无ip分配
wifi无ip分配

本专题整合了wifi无ip分配相关教程,阅读专题下面的文章了解更多详细教程。

100

2025.12.26

漫蛙漫画入口网址
漫蛙漫画入口网址

本专题整合了漫蛙入口网址大全,阅读下面的文章领取更多入口。

293

2025.12.26

b站看视频入口合集
b站看视频入口合集

本专题整合了b站哔哩哔哩相关入口合集,阅读下面的文章查看更多入口。

589

2025.12.26

俄罗斯搜索引擎yandex入口汇总
俄罗斯搜索引擎yandex入口汇总

本专题整合了俄罗斯搜索引擎yandex相关入口合集,阅读下面的文章查看更多入口。

725

2025.12.26

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

63

2025.12.25

错误代码dns_probe_possible
错误代码dns_probe_possible

本专题整合了电脑无法打开网页显示错误代码dns_probe_possible解决方法,阅读专题下面的文章了解更多处理方案。

30

2025.12.25

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

94

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号