首頁  >  文章  >  後端開發  >  圖解ThinkPHP5框架(四):一張圖徹底吃透框架配置(終結版)

圖解ThinkPHP5框架(四):一張圖徹底吃透框架配置(終結版)

天蓬老师
天蓬老师原創
2017-05-18 18:09:4010937瀏覽

本課程共分10個模組,從設定檔格式(php/ini/json/xml)到場景配置,模組配置,擴展配置,獨立配置,動態配置,自訂配置載入,環境變數變數,全景展現一個多彩的ThinkPHP5配置世界~~。

請將圖片開啟到新網頁查看,效果更好。或下載到本地檢視。本圖由xmind心智圖製作,底部有xmind原始檔下載,用xmind軟體開啟效果更棒。

一、心智圖:

圖解ThinkPHP5框架(四):一張圖徹底吃透框架配置(終結版)

二、檔案描述:

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檔案中:

<?php
return [
  &#39;site_name&#39;=>&#39;www.php.cn&#39;,
];

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 Array格式

2.1.1 這是預設格式,不用在入口檔案中設定CONF_EXT常


2.1.2 設定檔:config.php,內容是用return 傳回的陣列

<?php
return [
&#39;my_name&#39; => &#39;朱老师&#39;,
];
2.1.3 支援二配置,以二維數組表示
<?php
return [
&#39;my_info&#39; => [
      &#39;my_name&#39; => &#39;朱老师&#39;,
      &#39;my_age&#39; => 28,
      &#39;my_sex&#39; => &#39;男&#39;,
  ],
];

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');

<?php
// 定义应用目录
define(&#39;APP_PATH&#39;, __DIR__ . &#39;/../application/&#39;);
//定义配置目录
define(&#39;CONF_PATH&#39;, __DIR__ . &#39;/../config/&#39;);
// 更改配置格式为ini格式
define(&#39;CONF_EXT&#39;, &#39;.ini&#39;);
// 加载框架引导文件
require __DIR__ . &#39;/../thinkphp/start.php&#39;;

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');###
<?php
// 定义应用目录
define(&#39;APP_PATH&#39;, __DIR__ . &#39;/../application/&#39;);
//定义配置目录
define(&#39;CONF_PATH&#39;, __DIR__ . &#39;/../config/&#39;);
// 更改配置格式为ini格式
define(&#39;CONF_EXT&#39;, &#39;.xml&#39;);
// 加载框架引导文件
require __DIR__ . &#39;/../thinkphp/start.php&#39;;
###2.3.2 設定檔:config.xml,設定檔放在一對標籤中,標籤名稱就是配置項目###
<config>
   <my_home>安徽省合肥市</my_home>
</config>

<!--标签名就是配置项,可以自定义,根标签一定是config,其它字符串也行,内容在标签对中,-->

<abc>
   <my_home>安徽省合肥市</my_home>
</abc>
<!--标签只要成对出现就行-->
###2.3.3 支援二級配置,配置項目放在一對標籤中###
<abc>
<info>
   <my_home>安徽省合肥市</my_home>
   <my_work>中文网</my_work>
</info>
</abc>
######2.3.4 返回內容自動與應用配置合併,以數組方式傳回#########應用程式配置中傳回結果是二維數組:###
["info"] => array(2) {
    ["my_home"] => string(18) "安徽省合肥市"
    ["my_work"] => string(9) "中文网"
  }
######2.4 json格式#############2.4. 1 在入口檔案中變更設定格式: define('CONF_EXT', '.json');###
<?php
// 定义应用目录
define(&#39;APP_PATH&#39;, __DIR__ . &#39;/../application/&#39;);
//定义配置目录
define(&#39;CONF_PATH&#39;, __DIR__ . &#39;/../config/&#39;);
// 更改配置格式为ini格式
define(&#39;CONF_EXT&#39;, &#39;.xml&#39;);
// 加载框架引导文件
require __DIR__ . &#39;/../thinkphp/start.php&#39;;
###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家中###

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

<?php
return [
// 应用模式状态,将home改成office
&#39;app_status&#39;  => &#39;office&#39;,
];

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

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

里面写上如下内容:

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

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

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

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

4 模块配置

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

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

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

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

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

<?php
return [
// 模块模式状态
&#39;app_status&#39;  => &#39;module_office&#39;,
];

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

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

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

    

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

5 其它位置的配置文件

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

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

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

config/newconf/conf.php文件内容

<?php
return [
  &#39;user_define&#39; =>&#39;www.php.cn&#39;
];

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

<?php
namespace app\index\controller;
class Index
{
    public function index()
    {
//手工加载指定目录下的配置文件,注意Config类的命名空间
    \think\Config::load(APP_PATH.&#39;../config/newconf/conf.php&#39;);
    dump(\think\Config::get());
    }
}

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方法

<?php
namespace app\index\controller;
class Index
{
    public function index()
    {
//手工加载指定目录下的配置文件,注意Config类的命名空间
   \think\Config::parse(APP_PATH.&#39;../config/newconf/conf.ini&#39;,&#39;ini&#39;);
    dump(\think\Config::get());
    }
}

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方法检测某个配置项是否存在,返回布尔值

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

<?php
namespace app\index\controller;
class Index
{
    public function index()
  {
    dump(\think\Config::has(&#39;app_status&#39;));
  }
}

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

<?php
namespace app\index\controller;
class Index
{
    public function index()
  {
    dump(config(&#39;?app_status&#39;));
  }
}

7 动态设置参数

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

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

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

<?php
namespace app\index\controller;
class Index
{
    public function index()
  {
    \think\Config::set(&#39;site_domain&#39;,&#39;www.php.cn&#39;);
    dump(\think\Config::get());
  }
}

二、数组方式,批量设置

<?php
namespace app\index\controller;
use think\Config;
class Index
{
    public function index()
  {
    $config = [
      &#39;site_domain&#39; => &#39;www.php.cn&#39;,
      &#39;site_name&#39; => &#39;PHP中文网&#39;,
      &#39;php_tools&#39; => &#39;PHP程序员工具箱&#39;,
    ];
    Config::set($config);
    dump(Config::get());
  }
}

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

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

去掉上面的空间导入

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

<?php
namespace app\index\controller;
class Index
{
    public function index()
  {
    $config = [
      &#39;site_domain&#39; => &#39;www.php.cn&#39;,
      &#39;site_name&#39; => &#39;PHP中文网&#39;,
      &#39;php_tools&#39; => &#39;PHP程序员工具箱&#39;,
    ];
    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()

<?php
namespace app\index\controller;
use think\Config;
class Index
{
    public function index()
  {
    //设置一组配置项
    $config = [
      &#39;user_name&#39;=>&#39;peter&#39;,
      &#39;user_age&#39;=>28,
    ];
    //批量设置,写入user作用域
    Config::set($config,&#39;user&#39;);
    //输出全部配置项,发现作用域相当于二维数组名称
    dump(Config::get());
    //用二维数组方式获取user作用域中的user_name值
    dump(Config::get(&#39;user.user_name&#39;));
    //同样用数组的方式来设置配置项的值
      Config::set(&#39;user.user_name&#39;,&#39;php.cn&#39;);
      echo &#39;<hr>&#39;;
      //查看设置好的新值
      dump(Config::get(&#39;user.user_name&#39;));
      //切换作用域到系统全局_sys_(默认):用 Config::range()方法
      Config::range(&#39;_sys_&#39;);
      //查看全部配置项
      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(&#39;database.username&#39;); Env::get(&#39;database.password&#39;); 
// 同时下面的方式也可以获取
Env::get(&#39;database_username&#39;); 
Env::get(&#39;database_password&#39;);

可以支持默认值,例如:

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

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

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

return [ &#39;hostname&#39; => Env::get(&#39;hostname&#39;,&#39;127.0.0.1&#39;), ];

三、思维导图下载:

圖解ThinkPHP5框架(四):一張圖徹底吃透框架配置(終結版)框架配置.zip


以上是圖解ThinkPHP5框架(四):一張圖徹底吃透框架配置(終結版)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn