本书未发布

30. 配置信息

未匹配的标注

简介

在本节里,我们完成 ThinkBBS 项目的应用配置和数据库配置。

需求分解

在本节里,我们主要完成项目的应用配置(应用名称、应用地址和调试模式)和数据库连接配置。

遵循 开发规范 ,我们使用 env()config() 来实现配置信息的设置和读取。

配置文件存储位置

ThinkPHP 项目配置包括 应用配置模块配置。遵循 开发规范 , 应用配置 存储在项目 config 目录,模块配置 存储在模块的 config 子目录, 如 application/index/config

按照官方文档里的 [配置]www.kancloud.cn/manual/thinkphp5_1...) 说明,

  1. 模块配置文件可以存储在项目根目录的 config/module 目录里;
  2. 配置参数可以是 .ini.xml.json.yaml.php格式。

所以 ThinkPHP 项目的配置相当灵活,但在本教程里我们将遵循本教程的 开发规范,大家以后可以根据自己或公司开发习惯按照框架支持的格式制定自己的开发规范,但请大家在学习本教程过程中严格遵循本书的开发规范。

此外,大家在设置项目配置信息时还需要注意:

  1. 配置文件是按以下 从右到左 优先顺序加载:惯例配置->应用配置->模块配置->动态配置;
  2. 配置参数 区分大小写
  3. 慎用动态配置这种方式。

配置文件

一定注意了,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 文件纳入代码库。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~