j7mbo/config-loader

很棒。

安装: 12

依赖: 0

建议者: 0

安全: 0

星星: 3

关注者: 3

分支: 0

开放问题: 0

类型:application

dev-master 2014-01-24 21:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:05:59 UTC


README

提供面向对象的公共接口来读取配置文件,并在需要时检索配置值的依赖注入对象。

Test Status

目前仅包含Yaml,并使用 Symfony\Yaml

该服务提供以下功能

  • 必需的键。 如果配置不包含所有必需的键,将抛出异常。
  • 环境配置。 环境可以由位于 environment 键下的 global.yml 文件解析,也可以通过简单的setter在运行时设置。其他在 required_environments 键中的环境配置文件将被忽略。

安装

安装通过 Composer 完成。将以下内容添加到您的 composer.json 文件中

"require": {
    "j7mbo/config-loader": "dev-master" 
}

用法

  • 在引导程序中创建 YamlConfigLoader 对象。
  • 设置您的配置文件,并选择使用带有 environmentrequired_environments 键的 global.yml 文件,或者通过setter在运行时设置这些值。
  • 使用setter设置应用程序 必须 具有的任何必需键。
  • try/catch 中运行 YamlConfigLoader::load() 方法,并准备好处理任何异常,如 InvalidDirectoryException。相应地处理这些异常,通常是通过记录异常(例如,通过 Monolog\Logger)并向用户提供友好的消息。
  • 如果一切顺利,然后通过您的应用程序传递 YamlConfigLoader,并调用 YamlConfigLoader::getConfiguration() 来检索配置数组。

示例

首先,创建一个包含您的 YAML 文件的配置目录。这些可能是 dev.ymlsandbox.ymlstaging.ymllive.yml

在以下代码中,我们需要将所需的(可能的)环境设置为与上述环境文件相同的名称,并将我们的实际环境作为要使用的环境。

// bootstrap.php
require_once __DIR__ . "/vendor/autoload.php"; // You'll need the composer autoloader included

$parser = new Symfony\Component\Yaml\Yaml; // The Symfony YAML parser
$iteratorFactory = new ConfigLoader\FileSystemIteratorFactory; // Factory for a directory iterator
$configLoader = new ConfigLoader\YamlConfigLoader($parser, $iteratorFactory);
$configLoader->setEnvironment("dev");
$configLoader->setPossibleEnvironments(["dev", "sandbox", "staging", "live"]);

// sandbox.yml, staging.yml and live.yml will be ignored, whilst dev.yml will be parsed
// Usually, these files have identical keys, but different values (db settings etc)

try
{
    $configLoader->setDirectory( __DIR__ . "/config"); // Set the directory for our config files
    $configLoader->load(); // Parse the data into the class configuration member
    var_dump($configLoader->getConfiguration()); // This is the method you can use when you pass this configuration object around your application.
}
catch (ConfigLoader\Exception\InvalidDirectoryException $e)
{
    echo "You have a permissions exception, or the directory doesn't exist";
    // The config directory doesn't exist or isn't readable
    // Log the error message
    // Show a nice message to the user
}

更多信息

构造函数目录参数

您可以将目录作为 YamlConfigLoader::__construct() 方法的第三个参数传递。但是,您也需要在这里捕获 InvalidDirectoryExecption,因为目录setter执行验证并抛出异常,而构造函数使用此setter而不是直接设置成员变量。

非运行时环境设置

如果您不想每次更改环境时都更改代码,您不必使用 YamlConfigLoader::setEnvironment()YamlConfigLoader::setPossibleEnvironments() 方法。相反,创建一个包含 environment 键(包含单个值字符串)和 required_environments 键(包含多个值的子键)的 global.yml 文件。

如果省略运行时方法调用,如果找不到 environmentrequired_environments 键,或者找不到 global.yml 文件,将抛出以下异常

  • ConfigLoader\Exception\GlobalConfigFileNotFoundException
  • ConfigLoader\Exception\NonExistentEnvironmentKeyException
  • ConfigLoader\Exception\NonExistentRequiredConfigKeyException

确保有效的配置集

您还可以通过使用YamlConfigLoader::setRequiredKeys()确保配置始终有效,只需将一个数组作为它的唯一参数。如果在执行load()调用后找不到这些键中的任何一个,则抛出NonExistentRequiredConfigKeyException

通过键获取特定配置集

您不需要请求整个配置集。有时通过特定的键请求配置细节更为清晰。配置的getter允许通过参数执行此操作

`YamlConfigLoader::getConfiguration($key = "database");` 

这返回一个包含您配置中“database”键的数组,或者如果键不存在,则返回一个空数组。这里不会抛出异常。

getConfiguration() -> getConfig()

您可以使用YamlConfigLoader::getConfig()作为YamlConfigLoader::getConfiguration()的快捷方式。

扩展

您可以通过实现ConfigurationInterface并遵循YamlConfigLoader的方式添加自己的配置加载类。请确保在test/目录中添加对此的测试。

附加说明

这个类集合几乎像您的配置的服务定位器,但又不完全一样。它只是传递键和值的配置数组的面向对象方式。如果您有一个大型应用程序,那么这可能不是最佳方法,但对于小型应用程序来说,调用$this->config->getConfiguration("database");并不是问题。

根据您如何设置代码,您可以将特定的配置类注入到您的服务中 - 但这不是这个类的目标。