sgiphp/config

SugiPHP 配置组件

1.0.0 2014-12-16 12:51 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:55:48 UTC


README

Build Status

安装

composer require sugiphp/config ~1.0

SugiPHP\Config 旨在简化对配置设置的访问。Config 类原生支持从项目的一个或多个位置读取和解析多种文件类型的配置选项(php、json、yaml、ini、xml)。Config::get("file.key") 方法自动查找配置文件,加载它,解析它,然后搜索键并返回其值。如果文件或键未找到,则优雅地返回 NULL 或提供作为第二个参数的任何其他默认值。

用法

您可以使用不同的文件类型来存储设置

  • PHP(文件名为 app.php)
<?php
return array(
	"development" => array(
		"host" => "localhost",
		"debug" => 1
	),
	"production" => array(
		"host" => "example.com"
	)
);
?>
  • JSON(app.json)
{
	"development": {
		"host": "localhost",
		"debug": 1
	},
	"production": {
		"host": "example.com"
	}
}
  • YAML(app.yml)
development:
	host: localhost
	debug: 1

production:
	host: example.com
  • INI(app.ini)
[development]
host=localhost
debug=1

[production]
host=example.com
  • XML(app.xml)
<?xml version='1.0'?>
<environments>
	<development>
		<host>localhost</host>
		<debug>1</debug>
	</development>
	<production>
		<host>example.com</host>
	</production>
</environments>

无论您使用哪种类型的配置文件,都可以访问主机选项

<?php
$locator = new \SugiPHP\Config\FileLocator(__DIR__."/config");
$loader = new \SugiPHP\Config\JsonLoader($locator);
$config = new \SugiPHP\Config\Config($loader);

$config->get("app.production.host"); // returns example.com
$config->get("app.development"); // array("host" => "localhost", "debug" => 1)
$config->get("app.production.debug"); // will return NULL
$config->get("app.testing.host", "127.0.0.1"); // will return default value "127.0.0.1"
?>

文件定位器

文件定位器用于在一个或多个目录中搜索(配置)文件。

<?php
// search in one directory only
$locator = new FileLocator("/path/to/your/app/config/");
// search in several directories
$locator = new FileLocator(array("/path/to/your/app/config", "/other/config/path/"));
// add additional path
$locator->addPath("/somewhere/else/config/");
// Note that later method adds a path to the end. Locator will search in it only if the
// file was NOT found in the previously added paths. If you wish to add a path in the
// beginning of the search paths use:
$locator->unshiftPath("/first/search/path/");
// remove a search path from the end of the search paths:
$locator->popPath();
// remove a path from the beginning of the search paths:
$locator->shiftPath();
?>

加载器

加载器将一个键与其可以在某个地方找到的相应值(在文件中、在数据库中等)绑定,可以以任何形式存在(PHP 数组、JSON 字符串、XML 等)。以下是一个解释加载器的简单示例:假设您的应用程序位于 "/path/to/app",而您的配置文件位于 "/path/to/app/config" 路径。您的应用程序需要一个数据库连接。主机、数据库、用户和密码在一个位于配置目录的 PHP 文件中描述。您可以使用一个加载器,它将包含该文件夹中的文件(一个具有 ".php" 扩展名的 $key = "database"),并返回其内容,就像 PHP 代码会做的那样

<?php
include "/path/to/app/config/database.php";
?>

另一个更复杂的示例是当数据库以 JSON 格式描述时。因此,加载器将执行类似以下操作

<?php
return json_decode(file_get_contents("/path/to/app/config/database.json"), true);
?>

另一个示例是如果您的一些应用程序配置不是存储在文件中,而是在 NoSQL 存储中。因此,您可以编写自定义加载器,该加载器将连接到 NoSQL 数据库,获取项并将它们作为数组返回。这非常简单,而且更好的是,您的现有代码不需要任何修改。

您可以在 数据库加载器 中查看一个简单的数据库配置存储示例。