protected function TypedConfigManager::replaceVariable in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/lib/Drupal/Core/Config/TypedConfigManager.php \Drupal\Core\Config\TypedConfigManager::replaceVariable()
Replaces variable values in included names with configuration data.
Variable values are nested configuration keys that will be replaced by their value or some of these special strings:
- '%key', will be replaced by the element's key.
- '%parent', to reference the parent element.
- '%type', to reference the schema definition type. Can only be used in combination with %parent.
There may be nested configuration keys separated by dots or more complex patterns like '%parent.name' which references the 'name' value of the parent element.
Example patterns:
- 'name.subkey', indicates a nested value of the current element.
- '%parent.name', will be replaced by the 'name' value of the parent.
- '%parent.%key', will be replaced by the parent element's key.
- '%parent.%type', will be replaced by the schema type of the parent.
- '%parent.%parent.%type', will be replaced by the schema type of the parent's parent.
Parameters
string $value: Variable value to be replaced.
mixed $data: Configuration data for the element.
Return value
string The replaced value if a replacement found or the original value if not.
1 call to TypedConfigManager::replaceVariable()
- TypedConfigManager::replaceName in core/
lib/ Drupal/ Core/ Config/ TypedConfigManager.php - Replaces variables in configuration name.
File
- core/
lib/ Drupal/ Core/ Config/ TypedConfigManager.php, line 269 - Contains \Drupal\Core\Config\TypedConfigManager.
Class
- TypedConfigManager
- Manages config schema type plugins.
Namespace
Drupal\Core\ConfigCode
protected function replaceVariable($value, $data) {
$parts = explode('.', $value);
// Process each value part, one at a time.
while ($name = array_shift($parts)) {
if (!is_array($data) || !isset($data[$name])) {
// Key not found, return original value
return $value;
}
elseif (!$parts) {
$value = $data[$name];
if (is_bool($value)) {
$value = (int) $value;
}
// If no more parts left, this is the final property.
return (string) $value;
}
else {
// Get nested value and continue processing.
if ($name == '%parent') {
/** @var \Drupal\Core\Config\Schema\ArrayElement $parent */
// Switch replacement values with values from the parent.
$parent = $data['%parent'];
$data = $parent
->getValue();
$data['%type'] = $parent
->getDataDefinition()
->getDataType();
// The special %parent and %key values now need to point one level up.
if ($new_parent = $parent
->getParent()) {
$data['%parent'] = $new_parent;
$data['%key'] = $new_parent
->getName();
}
}
else {
$data = $data[$name];
}
}
}
}