function ChainedPlaceholderStrategy::processPlaceholders

Same name and namespace in other branches
  1. 11.x core/lib/Drupal/Core/Render/Placeholder/ChainedPlaceholderStrategy.php \Drupal\Core\Render\Placeholder\ChainedPlaceholderStrategy::processPlaceholders()
  2. 10 core/lib/Drupal/Core/Render/Placeholder/ChainedPlaceholderStrategy.php \Drupal\Core\Render\Placeholder\ChainedPlaceholderStrategy::processPlaceholders()
  3. 8.9.x core/lib/Drupal/Core/Render/Placeholder/ChainedPlaceholderStrategy.php \Drupal\Core\Render\Placeholder\ChainedPlaceholderStrategy::processPlaceholders()

File

core/lib/Drupal/Core/Render/Placeholder/ChainedPlaceholderStrategy.php, line 32

Class

ChainedPlaceholderStrategy
Renders placeholders using a chain of placeholder strategies.

Namespace

Drupal\Core\Render\Placeholder

Code

public function processPlaceholders(array $placeholders) {
  if (empty($placeholders)) {
    return [];
  }
  // 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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.