protected TypedConfigManager::replaceVariable($value, $data)
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.
File
- core/lib/Drupal/Core/Config/TypedConfigManager.php, line 309
Class
- TypedConfigManager
- Manages config schema type plugins.
Namespace
Drupal\Core\Config
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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 ]; } } } } |
Please login to continue.