function Mapping::getPossibleTypes
Same name in other branches
- 11.x core/lib/Drupal/Core/Config/Schema/Mapping.php \Drupal\Core\Config\Schema\Mapping::getPossibleTypes()
Returns all possible types for the type with the given name.
Parameters
string $name: Configuration name or key.
Return value
string[] All possible types for a given type. For example, `core_date_format_pattern.[%parent.locked]` will return:
- `core_date_format_pattern.0`
- `core_date_format_pattern.1`
If a fallback name is available, that will be returned too. In this example, that would be `core_date_format_pattern.*`.
1 call to Mapping::getPossibleTypes()
- Mapping::getDynamicallyValidKeys in core/
lib/ Drupal/ Core/ Config/ Schema/ Mapping.php - Gets all dynamically valid keys.
File
-
core/
lib/ Drupal/ Core/ Config/ Schema/ Mapping.php, line 258
Class
- Mapping
- Defines a mapping configuration element.
Namespace
Drupal\Core\Config\SchemaCode
protected function getPossibleTypes(string $name) : array {
// First, parse from e.g.
// `module.something.foo_[%parent.locked]`
// this:
// `[%parent.locked]`
// or from
// `[%parent.%parent.%type].third_party.[%key]`
// this:
// `[%parent.%parent.%type]` and `[%key]`.
// And collapse all these to just `[]`.
// @see \Drupal\Core\Config\TypedConfigManager::replaceVariable()
$matches = [];
if (preg_match_all('/(\\[[^\\]]+\\])/', $name, $matches) >= 1) {
$name = str_replace($matches[0], '[]', $name);
}
// Then, replace all `[]` occurrences with `.*` and escape all periods for
// use in a regex. So:
// `module\.something\.foo_.*`
// or
// `.*\.third_party\..*`
$regex = str_replace([
'.',
'[]',
], [
'\\.',
'.*',
], $name);
// Now find all possible types:
// 1. `module.something.foo_foo`, `module.something.foo_bar`, etc.
$possible_types = array_filter(array_keys($this->getTypedDataManager()
->getDefinitions()), fn(string $type) => preg_match("/^{$regex}\$/", $type) === 1);
// 2. The fallback: `module.something.*` — if no concrete definition for it
// exists.
$fallback_type = $this->getTypedDataManager()
->findFallback($name);
if ($fallback_type && !in_array($fallback_type, $possible_types, TRUE)) {
$possible_types[] = $fallback_type;
}
return $possible_types;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.