30. 配置信息
简介
在本节里,我们完成 ThinkBBS 项目的应用配置和数据库配置。
需求分解
在本节里,我们主要完成项目的应用配置(应用名称、应用地址和调试模式)和数据库连接配置。
遵循 开发规范 ,我们使用 env()
和 config()
来实现配置信息的设置和读取。
配置文件存储位置
ThinkPHP 项目配置包括 应用配置 和 模块配置。遵循 开发规范 , 应用配置 存储在项目 config
目录,模块配置 存储在模块的 config
子目录, 如 application/index/config
。
按照官方文档里的 [配置]www.kancloud.cn/manual/thinkphp5_1...) 说明,
- 模块配置文件可以存储在项目根目录的
config/module
目录里;- 配置参数可以是
.ini
、.xml
、.json
、.yaml
或.php
格式。所以 ThinkPHP 项目的配置相当灵活,但在本教程里我们将遵循本教程的 开发规范,大家以后可以根据自己或公司开发习惯按照框架支持的格式制定自己的开发规范,但请大家在学习本教程过程中严格遵循本书的开发规范。
此外,大家在设置项目配置信息时还需要注意:
- 配置文件是按以下 从右到左 优先顺序加载:惯例配置->应用配置->模块配置->动态配置;
- 配置参数 区分大小写;
- 慎用动态配置这种方式。
配置文件
一定注意了,ThinkPHP5.1 没有 config.php 配置文件,默认配置都在 app.php 配置文件,并且配置参数区分大小写。下面是配置文件的简单说明:
文件名称 | 配置类型 |
---|---|
app.php | 应用配置 |
cache.php | 缓存配置 |
cookie.php | Cookie配置 |
database.php | 数据库配置 |
log.php | 日志配置 |
middleware.php | 中间件配置 |
session.php | Session配置 |
template.php | 模板引擎配置 |
trace.php | Trace配置 |
访问配置值
你可以在项目里任何位置使用助手函数 config
或 Config 类的 get
方法来访问配置值。配置值的访问可以使用「点」语法,这其中包含了要访问的 文件名称 和 选项 的名称。
// 使用助手函数 config
// 读取 app.php 配置文件里的默认时区
$timezone = config('app.default_timezone');
// 读取所有 app 配置参数
$app = config('app.');
或:
// 使用 Config 类
use think\facade\Config;
// 读取 app.php 配置文件里的默认时区
$timezone = Config::get('app.default_timezone');
// 读取所有 app 配置参数
$app = Config::get('app.');
调整配置信息
我们直接修改各配置文件里的值来调用配置信息这种方式最为直接,但因为在初始化项目时这些配置文件已经添加到 Git 版本控制库里,当一个项目由多人来开发时因为每个人的本地开发环境不同需要给同一个参数设置不同值,使用这种方式来修改配置很容易造成配置文件冲突。所以我们通常开发时不直接在配置文件里调整配置信息,而是使用 .env
文件来设置。
使用 .env
文件来设置配置信息被称为 环境变量定义 , 文件中的配置参数定义格式采用 ini
方式。
首先,我们在项目根目录创建 .env
文件:
$ touch .env
环境配置如下:
.env
[APP]
NAME=ThinkBBS
HOST=bbs.test
DEBUG=true
TRACE=true
[DB]
HOST=localhost
NAME=think_bbs
USERNAME=homestead
PASSWORD=secret
PORT=3306
PREFIX=bbs_
框架提供的助手函数 env()
是用来读取环境变量的,所以我们接下来使用该方法把 config/app.php 和 config/database.php 里的配置值改成读取以上配置信息。
项目配置:
config/app.php
<?php
return [
// 应用名称
'app_name' => env('app.name', 'ThinkBBS'),
// 应用地址
'app_host' => env('app.host', 'http://bbs.test'),
// 应用调试模式
'app_debug' => env('app.debug', false),
// 应用Trace
'app_trace' => env('app.trace', false),
.
.
.
数据库配置:
config/database.php
<?php
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => env('db.host', '127.0.0.1'),
// 数据库名
'database' => env('db.name', ''),
// 用户名
'username' => env('db.username', 'root'),
// 密码
'password' => env('db.password', 'root'),
// 端口
'hostport' => env('db.port', '3306'),
// 数据库表前缀
'prefix' => env('db.prefix', ''),
// 连接dsn
'dsn' => '',
.
.
.
因为多人开发时不同开发者对 .env
文件的配置也可能不一样,所以我们通常是上传一个名为 .env.sample
文件到 Git 版本库,而不是直接把 .env
文件上传上去。下面我们把 .env
文件复制一份命名为 .env.sample
。
$ cp .env .env.sample
Git 代码版本控制
下面把代码纳入到版本管理:
$ git add -A
$ git commit -m "修改配置信息"
前面我们刚提到不要把 .env
文件提交到代码库里,可能有些同学会担心我们使用 git add -A
命令会把包括 .env
文件在内的所有修改或新添加文件添加到代码库里。其实大家完全不用担心这一点,我们创建项目时, ThinkPHP 会为我们在项目根目录里生成一个名为 .gitignore
的文件,git add -A
提交文件时会忽略掉符合 .gitignore
文件里忽略规则的文件和文件夹。下面框架生成的 .gitignore
文件内容:
.gitignore
/.idea
/.vscode
/vendor
*.log
thinkphp
.env
.DS_Store
所以我们使用 git add -A
命令提交代码时并不会把 .env
文件纳入代码库。
推荐文章: