dflydev / placeholder-resolver

给定一个表示键 => 值对的源数据,将像 ${foo.bar} 这样的占位符解析为数据源中与 'foo.bar' 键关联的值。

v1.0.3 2021-12-03 16:48 UTC

This package is auto-updated.

Last update: 2024-08-25 08:11:47 UTC


README

给定一个表示键 => 值对的源数据,将像 ${foo.bar} 这样的占位符解析为数据源中与 foo.bar 键关联的值。

占位符解析器旨在在相对较低级别使用。例如,配置库可以在后台使用占位符解析器,以便配置值可以引用其他配置值。

示例

conn.driver: mysql
conn.db_name: example
conn.hostname: 127.0.0.1
conn.username: root
conn.password: pa$$word

给定适当的 DataSourceInterface 实现来提供上述数据作为一组键 => 值对,占位符解析器将解析 $dsnPattern 的值为 mysql:dbname=example;host=127.0.0.1

$dsnPattern = '${conn.driver}:dbname=${conn.db_name};host=${conn.hostname}';
$dsn = $placeholderResolver->resolveValue($dsnPattern);
// mysql:dbname=example;host=127.0.0.1

需求

  • PHP 5.3+

用法

use Dflydev\PlaceholderResolver\RegexPlaceholderResolver;

// YourDataSource implements Dflydev\PlaceholderResolver\DataSource\DataSourceInterface
$dataSource = new YourDataSource;

// Create the placeholder resolver
$placeholderResolver = new RegexPlaceholderResolver($dataSource);

// Start resolving placeholders
$value = $placeholderResolver->resolvePlaceholder('${foo}');

RegexPlaceholderResolver 构造函数接受两个额外的参数,一个占位符前缀和一个占位符后缀。默认占位符前缀是 ${,默认占位符后缀是 }

为了处理看起来像 <foo.bar> 而不是 ${foo.bar} 的占位符,可以按如下方式实例化类

$placeholderResolver = new RegexPlaceholderResolver($dataSource, '<', '>');

占位符可以递归解析占位符。例如,给定以下数据源

array(
    'foo' => 'FOO',
    'bar' => 'BAR',
    'FOO.BAR' => 'BAZ!',
);

占位符 ${${foo}.${bar}} 将在内部解析为 ${FOO.BAR},然后再进一步解析为 BAZ!

解析的占位符使用 CacheInterface 进行缓存。除非在占位符解析器上显式设置,否则默认使用 Cache 实现。

// YourCache implements Dflydev\PlaceholderResolver\Cache\CacheInterface
$cache = new YourCache;

$placeholderResolver->setCache($cache);

许可证

此库根据新BSD许可证授权 - 有关详细信息,请参阅LICENSE文件。

社区

如果您有问题或想提供帮助,请加入irc.freenode.net上的#dflydev频道。

非原创

此库背后的许多想法都来自Spring的属性占位符配置器实现。