如何处理 PHP 库中的配置文件

How to handle config files in PHP library

我编写了一个小型库 (https://github.com/dborsatto/php-giantbomb),作为 API 的包装器。为了工作,库需要 2 个基本配置选项:

处理这两个文件的建议方法是什么?

API 密钥当然是个人的,因此不能添加到存储库中。但是这样做,我无法为整个库编写功能测试,从而将自己限制为仅对单个部分进行单元测试。我是完全放弃功能测试,还是有办法让它发挥作用?

关于其他配置,基本上它是一个 YAML 文件 (https://github.com/dborsatto/php-giantbomb/blob/master/api_config.yml),其中包括基础 API 端点和每个数据存储库的配置。目前,这是由 Config class 处理的,它以用户必须编写胶水代码并将数据注入 Config 的方式解耦。这种方式更容易测试,但总的来说,我觉得它比让 Config class 加载文件、解析它并相应地运行更不利。做这个的最好方式是什么?目前存储库中没有测试,但我正在处理它(以及一些代码重构)。

我建议将配置保留在您的库之外;我为 Mandrill 邮件服务做了类似的事情,我把配置管理留给了开发人员(我在 Symfony 2 项目中工作)。对我来说,没有 Config class,只有接受 API 键和(可选)选项数组的服务构造函数:

public function __construct($api, $options = array())
{
    // My code
}

当我需要在 Symfony 2 应用程序中使用我的服务时,我从服务外部的一个地方(Symfony 的配置文件)获取所需的参数和配置;这样我就可以将库与配置分离。当然,如果缺少必需参数,服务构造函数会抛出异常。