// Assert that there is at least one strategy.
assert(!
empty($this->placeholderStrategies
), 'At least one placeholder strategy must be present; by default the fallback strategy \Drupal\Core\Render\Placeholder\SingleFlushStrategy is always present.'
);
$new_placeholders =
[];
// Give each placeholder strategy a chance to replace all not-yet replaced
// placeholders. The order of placeholder strategies is well defined
// and this uses a variation of the "chain of responsibility" design pattern.
foreach ($this->placeholderStrategies
as $strategy) { $processed_placeholders =
$strategy->
processPlaceholders($placeholders);
assert(array_intersect_key($processed_placeholders,
$placeholders) ===
$processed_placeholders, 'Processed placeholders must be a subset of all placeholders.'
);
$placeholders =
array_diff_key($placeholders,
$processed_placeholders);
$new_placeholders +=
$processed_placeholders;
if (empty($placeholders)) { break;
} } return $new_placeholders;
}}