{"id":21819360,"url":"https://github.com/dflydev/dflydev-placeholder-resolver","last_synced_at":"2025-04-04T18:08:56.193Z","repository":{"id":2884029,"uuid":"3890782","full_name":"dflydev/dflydev-placeholder-resolver","owner":"dflydev","description":"Provides a mechanism to resolve placeholders from an arbitrary data source.","archived":false,"fork":false,"pushed_at":"2022-01-25T02:43:47.000Z","size":27,"stargazers_count":141,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-28T17:09:48.311Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dflydev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-04-01T06:36:47.000Z","updated_at":"2024-10-31T18:58:52.000Z","dependencies_parsed_at":"2022-07-31T14:09:29.819Z","dependency_job_id":null,"html_url":"https://github.com/dflydev/dflydev-placeholder-resolver","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dflydev%2Fdflydev-placeholder-resolver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dflydev%2Fdflydev-placeholder-resolver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dflydev%2Fdflydev-placeholder-resolver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dflydev%2Fdflydev-placeholder-resolver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dflydev","download_url":"https://codeload.github.com/dflydev/dflydev-placeholder-resolver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247226215,"owners_count":20904465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-27T16:18:39.751Z","updated_at":"2025-04-04T18:08:56.176Z","avatar_url":"https://github.com/dflydev.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Placeholder Resolver\n\nGiven a data source representing key =\u003e value pairs, resolve placeholders\nlike `${foo.bar}` to the value associated with the `foo.bar` key in\nthe data source.\n\nPlaceholder Resolver is intended to be used at a relatively low level.\nFor example, a configuration library could use Placeholder Resolver\nbehind the scenes to allow for configuration values to reference\nother configuration values.\n\n## Example\n\n```yml\nconn.driver: mysql\nconn.db_name: example\nconn.hostname: 127.0.0.1\nconn.username: root\nconn.password: pa$$word\n```\n\nGiven the appropriate `DataSourceInterface` implementation to provide\nthe above data as a set of key =\u003e value pairs, the Placeholder Resolver\nwould resolve the value of `$dsnPattern` to `mysql:dbname=example;host=127.0.0.1`.\n\n```php\n$dsnPattern = '${conn.driver}:dbname=${conn.db_name};host=${conn.hostname}';\n$dsn = $placeholderResolver-\u003eresolveValue($dsnPattern);\n// mysql:dbname=example;host=127.0.0.1\n```\n\n## Requirements\n\n * PHP 5.3+\n\n## Usage\n\n```php\nuse Dflydev\\PlaceholderResolver\\RegexPlaceholderResolver;\n\n// YourDataSource implements Dflydev\\PlaceholderResolver\\DataSource\\DataSourceInterface\n$dataSource = new YourDataSource;\n\n// Create the placeholder resolver\n$placeholderResolver = new RegexPlaceholderResolver($dataSource);\n\n// Start resolving placeholders\n$value = $placeholderResolver-\u003eresolvePlaceholder('${foo}');\n```\n\nThe `RegexPlaceholderResolver` constructor accepts two additional arguments,\na placeholder prefix and a placeholder suffix. The default placeholder\nprefix is `${` and the default placeholder suffix is `}`.\n\nTo handle placeholders that look like `\u003cfoo.bar\u003e` instead of `${foo.bar}`,\none would instantiate the class like this:\n\n```php\n$placeholderResolver = new RegexPlaceholderResolver($dataSource, '\u003c', '\u003e');\n```\n\nPlaceholders can recursively resolve placeholders. For example, given a\ndata source with the following:\n\n```php\narray(\n    'foo' =\u003e 'FOO',\n    'bar' =\u003e 'BAR',\n    'FOO.BAR' =\u003e 'BAZ!',\n);\n```\n\nThe placeholder `${${foo}.${bar}}` would internally be resolved to\n`${FOO.BAR}` before being further resolved to `BAZ!`.\n\nResolved placeholders are cached using the `CacheInterface`. The default\n`Cache` implementation is used unless it is explicitly set on the\nPlaceholder Resolver.\n\n```php\n// YourCache implements Dflydev\\PlaceholderResolver\\Cache\\CacheInterface\n$cache = new YourCache;\n\n$placeholderResolver-\u003esetCache($cache);\n```\n\n## License\n\nThis library is licensed under the New BSD License - see the LICENSE file\nfor details.\n\n## Community\n\nIf you have questions or want to help out, join us in the\n[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net.\n\n## Not Invented Here\n\nMuch of the ideas behind this library came from Spring's Property\nPlaceholder Configurer implementation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdflydev%2Fdflydev-placeholder-resolver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdflydev%2Fdflydev-placeholder-resolver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdflydev%2Fdflydev-placeholder-resolver/lists"}