dflydev / placeholder-resolver
给定一个表示键 => 值对的源数据,将像 ${foo.bar} 这样的占位符解析为数据源中与 'foo.bar' 键关联的值。
v1.0.3
2021-12-03 16:48 UTC
Requires
- php: >=5.3.2
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的属性占位符配置器实现。