Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

dflydev/dflydev-placeholder-resolver

Open more actions menu

Repository files navigation

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 channel on irc.freenode.net.

Not Invented Here

Much of the ideas behind this library came from Spring's Property Placeholder Configurer implementation.

About

Provides a mechanism to resolve placeholders from an arbitrary data source.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.