[TOC] ## 简介 在本节里,我们完成 ThinkBBS 的项目配置和数据库配置。 ## 需求分解 在本节里,我们主要完成项目的应用配置(应用名称、应用地址和调试模式)和数据库连接配置。 遵循 [开发规范](../c1_base/01060_开发规范.md) ,我们使用 `env()` 和 `config()` 来实现配置信息的设置和读取。 ## 配置文件存储位置 ThinkPHP 项目配置包括 **项目配置** 和 **应用配置**。遵循 [开发规范](../c1_base/01060_开发规范.md) , **项目配置** 存储在项目 `config` 目录,**应用配置* 存储在应用的 `config` 子目录, 如 `app/index/config`。 >[warning] 按照官方文档里的 [配置](https://www.kancloud.cn/manual/thinkphp6_0/1037484) 说明, > ThinkPHP 项目的配置相当灵活,但在本教程里我们将遵循本教程的 [开发规范](../c1_base/01060_开发规范.md),大家以后可以根据自己或公司开发习惯按照框架支持的格式制定自己的开发规范,但请大家在学习本教程过程中严格遵循本书的开发规范。 > > 此外,大家在设置项目配置信息时还需要注意: > > 1. 配置文件是按以下 **从右到左** 优先顺序加载:惯例配置->项目配置->应用配置; > 2. 配置参数 **区分大小写**。 ## 配置文件 一定注意了,ThinkPHP6.0 **没有** config.php 配置文件,默认配置都在 app.php 配置文件,并且配置参数区分大小写。下面是配置文件的简单说明: | 文件名称 | 配置类型 | | -------- | -------- | app.php|应用配置 cache.php|控制台配置 console.php|缓存配置 cookie.php|Cookie配置 database.php|数据库配置 filesystem.php|文件磁盘配置 lang.php|多语言配置 log.php|日志配置 middleware.php|中间件配置 route.php|URL和路由配置 session.php|Session配置 trace.php|Trace配置 view.php|视图配置 ## 访问配置值 你可以在项目里任何位置使用助手函数 `config` 或 Config 类的 `get` 方法来访问配置值。配置值的访问可以使用「点」语法,这其中包含了要访问的 **文件名称** 和 **选项** 的名称。 ```php // 使用助手函数 config // 读取 app.php 配置文件里的默认时区 $timezone = config('app.default_timezone'); // 读取所有 app 配置参数 $app = config('app'); ``` 或: ```php // 使用 Config 类 use think\facade\Config; // 读取 app.php 配置文件里的默认时区 $timezone = Config::get('app.default_timezone'); // 读取所有 app 配置参数 $app = Config::get('app'); ``` ## 设置环境变量 很多开发人员最喜欢直接在配置文件里修改项目配置参数,但当在开发过程中使用 Git 、SVN 或其它工具控制代码版本时由于团队内不同开发人员或不同部署环境时的参数配置值不同,直接修改配置文件里的参数值很容易造成代码冲突。所以,我们通常是使用 `.env` 来存储环境变量值。 使用 `.env` 设置配置信息被称为 [环境变量定义](https://www.kancloud.cn/manual/thinkphp6_0/1037484) , 文件中的配置参数定义采用 `ini` 格式。 当项目生成结束后,框架会在根目录生成一个名为 `.example.env` 的示例配置文件,所以我们复制该文件来创建本地的 `.env` 文件: ```shell $ cp .example.env .env ``` 然后,把新创建的 `.env` 改成以下内容: *.env* ``` APP_DEBUG = true [APP] HOST=bbs.test DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = think_bbs USERNAME = homestead PASSWORD = secret HOSTPORT = 3306 CHARSET = utf8 DEBUG = true PREFIX = bbs_ [LANG] default_lang = zh-cn ``` 同时,为了方便其他人部署项目时创建 `.env` 文件,我们把新增配置项也添加到 `.example.env` 文件里: *.example.env* ``` APP_DEBUG = false [APP] HOST=bbs.test DEFAULT_TIMEZONE = Asia/Shanghai [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = test USERNAME = username PASSWORD = password HOSTPORT = 3306 CHARSET = utf8 DEBUG = true PREFIX = bbs_ [LANG] default_lang = zh-cn ``` ### 代码解读 - `APP_DEBUG` 和其它配置项不同,它不属于任何「节」,该参数是用来设置是否开启 [调试模式](https://www.kancloud.cn/manual/thinkphp6_0/1037618),当值为 `true` 时我们可以查看访问页面的 [Trace调试信息](https://www.kancloud.cn/manual/thinkphp6_0/1037619) 。在这里我们遵循官方建议,**在开发阶段始终开启调试模式** 。 ## 调整配置信息 接下来,我们在配置文件里使用以上设置的环境变量: *config/app.php* ```php <?php use think\facade\Env; return [ // 应用地址 'app_host' => Env::get('app.host', ''), . . . // 默认时区 'default_timezone' => Env::get('app.default_timezone', 'Asia/Shanghai'), . . . ]; ``` 因为框架生成的 `config/database.php` 里的数据库连接本身就是读取的环境变量,所以不需要进行任何修改。 *config/database.php* ```php use think\facade\Env; return [ . . . // 数据库连接配置信息 'connections' => [ 'mysql' => [ // 数据库类型 'type' => Env::get('database.type', 'mysql'), // 服务器地址 'hostname' => Env::get('database.hostname', '127.0.0.1'), // 数据库名 'database' => Env::get('database.database', ''), // 用户名 'username' => Env::get('database.username', 'root'), // 密码 'password' => Env::get('database.password', ''), // 端口 'hostport' => Env::get('database.hostport', '3306'), // 数据库连接参数 'params' => [], // 数据库编码默认采用utf8 'charset' => Env::get('database.charset', 'utf8'), // 数据表前缀 'prefix' => Env::get('database.prefix', ''), . . . ], ], ]; ``` 因为在本项目里,我们不希望用户通过 URL 访问 **共用应用(common)** 里的内容,所以我们把该应用添加到禁止访问应用列表里。**因为该设置和本地配置无关,所以我们直接在配置文件里进行修改**。 *config/app.php* ```php use think\facade\Env; return [ . . . // 禁止URL访问的应用列表(自动多应用模式有效) 'deny_app_list' => ['common'], . . . ]; ``` ## Git 代码版本控制 下面把代码纳入到版本管理: ```shell $ git add -A $ git commit -m "修改配置信息" ``` 由于在根目录 `.gitignore` 文件的忽略规则有 *.env* 这一条,所以大家不必担心执行 `git add -A` 命令时把 `.env` 文件纳入到版本控制里。