Maison  >  Article  >  développement back-end  >  Framework ThinkPHP5 illustré (4) : Comprendre complètement la configuration du framework en une seule image (version finale)

Framework ThinkPHP5 illustré (4) : Comprendre complètement la configuration du framework en une seule image (version finale)

天蓬老师
天蓬老师original
2017-05-18 18:09:4010931parcourir

Ce cours est divisé en 10 modules, du format de fichier de configuration (php/ini/json/xml) à la configuration de scène, en passant par la configuration de module, la configuration étendue, la configuration indépendante, la configuration dynamique, le chargement de configuration personnalisée, les variables d'environnement et le panorama. un monde de configuration ThinkPHP5 coloré ~~.

Veuillez ouvrir l'image sur une nouvelle page Web pour la visualiser et obtenir un meilleur effet. Ou téléchargez-le pour le visualiser localement. Cette image est réalisée par xmind mind map. Il y a le téléchargement du fichier source xmind en bas. Il sera préférable de l'ouvrir avec le logiciel xmind.

1. Carte mentale :

Framework ThinkPHP5 illustré (4) : Comprendre complètement la configuration du framework en une seule image (version finale)

2. Description du fichier :

Configuration du framework ThinkPHP5

1 Répertoire de configuration

1.1 Répertoire de configuration par défaut

1.1.1 Configuration de l'application : répertoire d'application

1.1.2 Configuration du module : répertoire application/module

1.2 Répertoire de configuration personnalisé

1.2.1 Dans le fichier d'entrée : définir('CONF_PATH', __DIR__.'/../config/');

1.2.2 Définir le répertoire du fichier de configuration défini par l'utilisateur et au même niveau que le répertoire de l'application

1.2.3 Le fichier de configuration de l'application en comprend trois : config.php/database.php/route.php

1.2. 4 Configuration du module Les fichiers en comprennent trois : config.php/database.php

1.2.5 La route a été générée lors de l'initialisation de l'application, ne configurez donc pas route.php dans le module

1.3 Répertoire de configuration étendu

1.3.1 Créer un répertoire supplémentaire sous le répertoire de configuration de l'application ou du module

1.3.2 Le nom du fichier de configuration créé sous le répertoire supplémentaire est le nom de la configuration étendue, donc les configurations étendues sont toutes des tableaux bidimensionnels

1. Créez dans le répertoire supplémentaire : myconf.php

2. Dans le fichier myconf.php :

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

. 3. Accès dans le contrôleur :

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

est visible à la fin :

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

1.3.3 Les éléments de configuration étendue finalement créés seront fusionnés avec l'application éléments de configuration (dump(thinkConfig::get());//View)

2 Format de configuration

2.1 Format du tableau

2.1.1 Il s'agit du format par défaut Il n'est pas nécessaire de configurer CONF_EXT dans le fichier d'entrée

2.1.2 Fichier de configuration : config.php, le contenu est Le tableau renvoyé par return

<?php
return [
&#39;my_name&#39; => &#39;朱老师&#39;,
];
2.1.3 prend en charge deux configurations, représentées par un tableau bidimensionnel

<?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 Le contenu renvoyé est automatiquement fusionné avec la configuration de l'application en mode Array renvoie

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

Format ini 2.2

2.2.1 Modifier le format de configuration dans le fichier d'entrée : définir('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 Configuration fichier : config.ini, le contenu est composé de paires nom-valeur reliées par des signes égaux, et les commentaires sont écrits en Le nom suivi de

utilise la nomenclature hongroise, les noms et les valeurs sont connectées par des signes égal, et les valeurs n'utilisent pas de symboles de délimitation

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

2.2.3 Prend en charge la configuration secondaire, les éléments de configuration sont placés entre crochets

Contenu de configuration de deuxième niveau dans config.ini

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

2.2.4 Le contenu renvoyé est automatiquement fusionné avec le configuration de l'application et renvoyé sous forme de tableau

Le résultat renvoyé dans la configuration de l'application est un tableau bidimensionnel :

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

2.3.1 Changer le format de configuration dans le fichier d'entrée : definition('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 Fichier de configuration : config .xml, les éléments de configuration sont placés dans une paire d'étiquettes et le nom de l'étiquette est l'élément de configuration

<config>
   <my_home>安徽省合肥市</my_home>
</config>

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

<abc>
   <my_home>安徽省合肥市</my_home>
</abc>
<!--标签只要成对出现就行-->
2.3.3 Prend en charge la configuration secondaire, les éléments de configuration sont placés dans une paire d'étiquettes

<abc>
<info>
   <my_home>安徽省合肥市</my_home>
   <my_work>中文网</my_work>
</info>
</abc>

2.3.4 Le contenu renvoyé est automatiquement fusionné avec la configuration de l'application et renvoyé sous forme de tableau

Le résultat renvoyé dans la configuration de l'application est un deux -tableau dimensionnel :

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

2.4 format json

2.4.1 Changer le format de configuration dans le fichier d'entrée : définir('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 Fichier de configuration : config.json, les éléments de configuration sont placés dans des objets json et les paires nom-valeur des éléments de configuration sont représentées par des objets javascript

{
  "my_name":"朱老师",
  "my_age":28,
  "my_sex":"男"
}
Attention particulière : après le dernier élément de configuration, n'ajoutez pas de virgules

2.4.3 Prend en charge la configuration secondaire, les éléments de configuration sont placés dans une paire de balises

{
  "base_info":{
    "my_name":"朱老师",
    "my_age":28,
    "my_sex":"男"
  }
}
est très simple, il suffit d'ajouter une couche supplémentaire au niveau supérieur de toutes les configurations, puis d'y imbriquer les données actuelles.

2.4.4 Le contenu renvoyé est automatiquement fusionné avec la configuration de l'application et renvoyé dans un tableau

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

Configuration à 3 scénarios

3.1 Objectif : Utiliser différents éléments de configuration dans différents environnements

3.2 Modifier le « app_status » dans la configuration de l'application. php =>'Nom de la scène',

Ce nom de scène correspond à un fichier de configuration sous le répertoire de configuration de l'application. Le contenu du fichier de configuration est en mode tableau par défaut. .

Par exemple, vous pouvez travailler à la maison et utiliser des paramètres de connexion à la base de données différents de ceux du bureau.

Ensuite, vous pouvez d'abord définir :

'app_status'=>'home' comme maison

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

<?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;), ];

三、思维导图下载:

Framework ThinkPHP5 illustré (4) : Comprendre complètement la configuration du framework en une seule image (version finale)框架配置.zip


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn