>백엔드 개발 >PHP 튜토리얼 >ThinkPHP5 프레임워크 그림(4): 프레임워크 구성을 한 장의 그림으로 완벽하게 이해(최종 버전)

ThinkPHP5 프레임워크 그림(4): 프레임워크 구성을 한 장의 그림으로 완벽하게 이해(최종 버전)

天蓬老师
天蓬老师원래의
2017-05-18 18:09:4010982검색

본 강좌는 구성 파일 형식(php/ini/json/xml)부터 장면 구성, 모듈 구성, ​​확장 구성, 독립 구성, 동적 구성, 사용자 정의 구성 로딩, 환경 변수, 파노라마까지 10개의 모듈로 구성되어 있습니다. 다채로운 ThinkPHP5 구성의 세계~~.

더 나은 효과를 보려면 사진을 새 웹페이지에서 열어보세요. 또는 다운로드하여 로컬에서 볼 수도 있습니다. 이 사진은 xmind 마인드맵으로 만든 것입니다. 하단에 xmind 소스 파일 다운로드가 있습니다. xmind 소프트웨어로 여는 것이 더 좋을 것입니다.

1. 마인드맵:

ThinkPHP5 프레임워크 그림(4): 프레임워크 구성을 한 장의 그림으로 완벽하게 이해(최종 버전)

2. 파일 설명:

ThinkPHP5 프레임워크 구성

1 구성 디렉터리

1.1 기본 구성 디렉터리

1.1.1 애플리케이션 구성: 애플리케이션 디렉터리

1.1.2 모듈 구성: 애플리케이션/모듈 디렉터리

1.2 사용자 정의 구성 디렉터리

1.2.1 항목 파일에서: 정의('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 애플리케이션 또는 모듈 구성 디렉터리 아래에 추가 디렉터리를 생성

1.3.2 추가 디렉터리 아래에 생성되는 구성 파일의 이름은 확장 구성 이름이므로 확장 구성은 모두 2차원 배열입니다

1. 추가 디렉토리에 생성: 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( thinkConfig::get());//View)

2 구성 형식

2.1 배열 형식

2.1.1 이는 기본 형식이므로 항목 파일

2.1에서 CONF_EXT를 구성할 필요가 없습니다. 2 구성 파일: config.php, 내용은 return

<?php
return [
&#39;my_name&#39; => &#39;朱老师&#39;,
];

에서 반환한 배열입니다. 2.1.3 2차원 배열

<?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 반환된 콘텐츠는 자동으로 애플리케이션 구성과 병합되어 배열을 형성합니다. 메서드는
을 반환합니다. 🎜>

애플리케이션 구성에서 반환된 결과는 2차원 배열입니다.

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

2.3 xml 형식

2.3 .1 구성 변경 항목 파일의 형식: 정의('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 반환된 콘텐츠는 자동으로 애플리케이션과 병합됩니다. 배열의 구성 반환

애플리케이션 구성에서 반환된 결과는 2차원 배열입니다:

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

2.4 json 형식

2.4.1 입구에서 파일의 구성 형식을 변경합니다: 정의('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'을 집으로 설정할 수 있습니다

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

<?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 프레임워크 그림(4): 프레임워크 구성을 한 장의 그림으로 완벽하게 이해(최종 버전)框架配置.zip


위 내용은 ThinkPHP5 프레임워크 그림(4): 프레임워크 구성을 한 장의 그림으로 완벽하게 이해(최종 버전)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.