101 lines
2.8 KiB
Markdown
101 lines
2.8 KiB
Markdown
![]() |
Placeholder Resolver
|
||
|
====================
|
||
|
|
||
|
Given a data source representing key => value pairs, resolve placeholders
|
||
|
like `${foo.bar}` to the value associated with the `foo.bar` key in
|
||
|
the data source.
|
||
|
|
||
|
Placeholder Resolver is intended to be used at a relatively low level.
|
||
|
For example, a configuration library could use Placeholder Resolver
|
||
|
behind the scenes to allow for configuration values to reference
|
||
|
other configuration values.
|
||
|
|
||
|
|
||
|
Example
|
||
|
-------
|
||
|
|
||
|
conn.driver: mysql
|
||
|
conn.db_name: example
|
||
|
conn.hostname: 127.0.0.1
|
||
|
conn.username: root
|
||
|
conn.password: pa$$word
|
||
|
|
||
|
Given the appropriate `DataSourceInterface` implementation to provide
|
||
|
the above data as a set of key => value pairs, the Placeholder Resolver
|
||
|
would resolve the value of `$dsnPattern` to `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
|
||
|
|
||
|
|
||
|
Requirements
|
||
|
------------
|
||
|
|
||
|
* PHP 5.3+
|
||
|
|
||
|
|
||
|
Usage
|
||
|
-----
|
||
|
|
||
|
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}');
|
||
|
|
||
|
The `RegexPlaceholderResolver` constructor accepts two additional arguments,
|
||
|
a placeholder prefix and a placeholder suffix. The default placeholder
|
||
|
prefix is `${` and the default placeholder suffix is `}`.
|
||
|
|
||
|
To handle placeholders that look like `<foo.bar>` instead of `${foo.bar}`,
|
||
|
one would instantiate the class like this:
|
||
|
|
||
|
$placeholderResolver = new RegexPlaceholderResolver($dataSource, '<', '>');
|
||
|
|
||
|
Placeholders can recursively resolve placeholders. For example, given a
|
||
|
data source with the following:
|
||
|
|
||
|
array(
|
||
|
'foo' => 'FOO',
|
||
|
'bar' => 'BAR',
|
||
|
'FOO.BAR' => 'BAZ!',
|
||
|
);
|
||
|
|
||
|
The placeholder `${${foo}.${bar}}` would internally be resolved to
|
||
|
`${FOO.BAR}` before being further resolved to `BAZ!`.
|
||
|
|
||
|
Resolved placeholders are cached using the `CacheInterface`. The default
|
||
|
`Cache` implementation is used unless it is explicitly set on the
|
||
|
Placeholder Resolver.
|
||
|
|
||
|
// YourCache implements Dflydev\PlaceholderResolver\Cache\CacheInterface
|
||
|
$cache = new YourCache;
|
||
|
|
||
|
$placeholderResolver->setCache($cache);
|
||
|
|
||
|
|
||
|
License
|
||
|
-------
|
||
|
|
||
|
This library is licensed under the New BSD License - see the LICENSE file
|
||
|
for details.
|
||
|
|
||
|
|
||
|
Community
|
||
|
---------
|
||
|
|
||
|
If you have questions or want to help out, join us in the
|
||
|
[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.
|
||
|
|
||
|
|
||
|
Not Invented Here
|
||
|
-----------------
|
||
|
|
||
|
Much of the ideas behind this library came from Spring's Property
|
||
|
Placeholder Configurer implementation.
|