ThinkPHP公共配置文件与各自项目中配置文件组合的方法

下面是“ThinkPHP公共配置文件与各自项目中配置文件组合的方法”的攻略:

一、ThinkPHP公共配置文件

ThinkPHP公共配置文件放在/thinkphp/library/think/config.php目录下,这个文件中定义了大量的全局的配置项,比如:

return [
    'app_debug'              => false,
    'app_trace'              => false,
    'default_lang'           => 'zh-cn',
    'default_return_type'    => 'html',
    'http_exception_template'=> [],
    'show_error_msg'         => false,
    // ...其它配置项
];

上述配置文件中return数组中的键值即为配置项,每个配置项都有一个默认值,当你需要进行更改时,只需要在项目配置文件中加入对应的项即可覆盖默认值。

二、各自项目中的配置文件

ThinkPHP的项目配置文件为/application/config.php,同样也是一个return数组,可以覆盖公共配置文件中的设置。例如:

return [
    // 数据库配置信息
    'database'        => [
        // 数据库类型
        'type'            => 'mysql',
        // 服务器地址
        'hostname'        => '127.0.0.1',
        // 数据库名
        'database'        => 'testdb',
        // 数据库用户名
        'username'        => 'root',
        // 数据库密码
        'password'        => '',
        // 数据库编码默认采用utf8
        'charset'         => 'utf8',
        // 数据库表前缀
        'prefix'          => 'think_',
    ],
    'url_route_on'    => true,
    'url_route_must'  => false,
    // ...其它配置项
];

上述配置文件为数据库配置,覆盖了公共配置文件中的database配置项。当我们在代码中使用了数据库时,系统会默认获取这里的配置信息。

三、公共配置文件与项目配置文件组合方法

对于公共配置文件和项目配置文件,我们既可以分别用于存放不同的配置项,也可以对公共配置文件进行一些扩展,比如:

1. 合并公共配置文件和项目配置文件

当你希望公共配置文件中的某个项对所有项目都适用,但是某个项目有一些自定义配置时,可以合并这两个配置文件。方法如下:

// 引入公共配置文件
$public_config = include '/thinkphp/library/think/config.php';
// 引入当前项目配置文件
$site_config = include '/application/config.php';
// 合并两个数组
return array_merge($public_config, $site_config);

2. 使用环境变量

为了方便不同环境的配置,可以使用环境变量,例如:

return [
    'database'      => [
        'type'          => 'mysql',
        'hostname'      => getenv('DB_HOST') ?: '127.0.0.1',
        'database'      => getenv('DB_NAME') ?: 'testdb',
        'username'      => getenv('DB_USER') ?: 'root',
        'password'      => getenv('DB_PASS') ?: '',
        'prefix'        => 'think_',
        'charset'       => 'utf8',
    ],
    // ...其它配置项
];

上述代码中使用了getenv()函数读取了系统中的环境变量,如果环境变量不存在,使用默认值。

四、示例说明

下面以具体的示例说明公共配置文件与项目配置文件的用法:

1. 合并公共配置文件和项目配置文件

例如你有3个不同的项目,需要分别配置:

公共配置文件

// thinkphp/library/think/config.php
return [
    'app_debug'              => false,
    'app_trace'              => false,
    'default_lang'           => 'zh-cn',
    'default_return_type'    => 'html',
    'http_exception_template'=> [],
    'show_error_msg'         => false,
];

项目A的配置文件

// application/config.php
return [
    'database'      => [
        'type'          => 'mysql',
        'hostname'      => '127.0.0.1',
        'database'      => 'testa',
        'username'      => 'root',
        'password'      => '',
        'prefix'        => 'think_',
        'charset'       => 'utf8',
    ],
];

项目B的配置文件

// application/config.php
return [
    'database'      => [
        'type'          => 'mysql',
        'hostname'      => '127.0.0.1',
        'database'      => 'testb',
        'username'      => 'root',
        'password'      => '',
        'prefix'        => 'think_',
        'charset'       => 'utf8',
    ],
];

项目C的配置文件

// application/config.php
return [
    'database'      => [
        'type'          => 'mysql',
        'hostname'      => '127.0.0.1',
        'database'      => 'testc',
        'username'      => 'root',
        'password'      => '',
        'prefix'        => 'think_',
        'charset'       => 'utf8',
    ],
];

然后我们在项目的入口文件/public/index.php中引用配置文件:

// 引入公共配置文件
$config_public = include '../thinkphp/library/think/config.php';
// 引入当前项目配置文件
$config_site = include '../application/config.php';
// 合并两个配置文件
$config = array_merge($config_public, $config_site);

// 前面已经定义了常量APP_PATH了,所以这里使用define更改CONFIG_PATH
define('CONFIG_PATH', APP_PATH . "config/");

// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

这样,在不同的项目中,我们依然可以使用公共配置文件中的配置项,也可以在自己的配置文件中添加项目的特有配置项。

2. 使用环境变量

例如,在开发环境和生产环境中,你的数据库配置不一样:

公共配置文件

// thinkphp/library/think/config.php
return [
    // 其它配置项
    'database'      => [
        'type'          => 'mysql',
        'hostname'      => getenv('DB_HOST') ?: '127.0.0.1',
        'database'      => getenv('DB_NAME') ?: 'test',
        'username'      => getenv('DB_USER') ?: 'root',
        'password'      => getenv('DB_PASS') ?: '',
        'prefix'        => 'think_',
        'charset'       => 'utf8',
    ],
];

环境变量的设置方式可以参考操作系统的文档。在这里,我们假设在开发环境下,环境变量设置如下:

export DB_HOST=127.0.0.1
export DB_NAME=test_dev
export DB_USER=root
export DB_PASS=123456

在生产环境下,环境变量的值可以通过配置文件进行设置,例如:

export DB_HOST=example.com
export DB_NAME=test_prod
export DB_USER=admin
export DB_PASS=abcdef

然后,在框架的入口文件/public/index.php中引用配置文件,配置文件中的getenv()函数会获取系统中的环境变量:

// 引入公共配置文件
$config_public = include '../thinkphp/library/think/config.php';
// 引入当前项目配置文件
$config_site = include '../application/config.php';
// 合并两个配置文件
$config = array_merge($config_public, $config_site);

// 前面已经定义了常量APP_PATH了,所以这里使用define更改CONFIG_PATH
define('CONFIG_PATH', APP_PATH . "config/");

// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

这样,在不同环境中,我们可以使用相同的代码,只需要在不同的环境中设置一下环境变量或者修改配置文件中的默认值即可。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ThinkPHP公共配置文件与各自项目中配置文件组合的方法 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Win10一周年更新PC版发布版本汇总 (2015.12~2016.6)

    Win10一周年更新PC版发布版本汇总 (2015.12~2016.6) 攻略 简介 Win10一周年更新是微软在2015年12月至2016年6月期间发布的一系列更新,为Windows 10操作系统带来了许多新功能和改进。本攻略将详细介绍这些更新的内容和如何使用它们。 更新版本列表 以下是Win10一周年更新PC版发布版本的汇总: 2015年12月:版本15…

    other 2023年8月3日
    00
  • 新公链CANTO生态 完全去中心化 免费DEX 算稳币NOTE等

    CANTO是一个全新的公链生态,完全去中心化,提供免费的去中心化交易所(DEX)和算稳币(NOTE)等服务,以下是CANTO生态的完整攻略: 准备 在使用CANTO之前,需要先准备一些基础设施: 安装最新版的 CANTO 客户端 创建一个钱包地址并备份私钥 获取一些 CANTO 的代币(简称 CTO) 安装CANTO客户端 CANTO客户端是连接CANTO网…

    other 2023年6月26日
    00
  • Postgresql 默认用户名与密码的操作

    PostgreSQL 默认的用户名为postgres,密码可以在安装过程中设置,若没有设置则默认为空密码。接下来将为您介绍PostgreSQL默认用户名与密码的常用操作方式: 1. 修改PostgreSQL默认密码 在命令行中输入以下命令可进入PostgreSQL命令行: “`shell scriptpsql -U postgres 此时若输入`postg…

    other 2023年6月27日
    00
  • Android 基础入门教程——开发环境搭建

    Android 基础入门教程——开发环境搭建 本文将详细讲解如何搭建 Android 开发环境。初学者可以参照本教程一步一步操作,完成 Android 环境搭建。 步骤一:安装 JDK 在进行 Android 开发之前,需要先安装 Java 开发工具包(JDK)。可以从 Oracle 官网下载安装包,并按照提示进行安装。 步骤二:安装 Android Stu…

    other 2023年6月27日
    00
  • 浅谈java IO流——四大抽象类

    介绍Java IO流前,先来明确一下IO流的概念。IO(Input/Output)即输入/输出操作,是计算机应用程序与外部世界(用户、文件)进行交互的重要手段。Java IO流是Java程序中用于读写数据的一种机制,Java为此提供了一系列的API以便于开发者使用。 Java IO流分为两种:字节流和字符流。字节流操作所有类型的文件(如音频、视频、图片等),…

    other 2023年6月27日
    00
  • Flash中this构造函数不能表示参数的含义该怎么办?

    Flash中this构造函数不能表示参数的含义该怎么办? 在Flash中,this关键字在构造函数中表示当前实例化的对象。然而,this关键字无法直接表示构造函数的参数。为了解决这个问题,可以使用其他变量名来表示构造函数的参数。以下是解决方法的详细攻略: 使用其他变量名来表示构造函数的参数。例如,可以使用param或arg等变量名来表示构造函数的参数。示例代…

    other 2023年10月13日
    00
  • 基于Android的服务器端程序实例

    基于Android的服务器端程序实例攻略 前置知识 Java语言基础 Android开发基础 网络编程基础 概述 本攻略主要介绍如何基于Android平台开发一个服务器端程序。我们将使用Java语言和Android开发工具进行开发,常用的网络编程库OkHttp将被用来作为网络请求的框架。在本攻略中,我们将主要从以下几个方面进行讲解: 服务器端程序架构设计 安…

    other 2023年6月27日
    00
  • mysql启动服务时提示’服务名无效’

    mysql启动服务时提示”服务名无效” 如果你在Windows上安装了MySQL数据库,并试图使用服务管理器启动MySQL服务时,可能会遇到一个常见的错误: “服务名无效”。这种情况通常发生在你尝试重新安装或更新MySQL时。 原因 这个问题通常是由于MySQL服务的重命名或删除导致的。如果以前已经安装了MySQL,然后你重新安装MySQL时更改了服务名称,…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部