Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ChainedPlaceholderStrategy.php

function ChainedPlaceholderStrategy::processPlaceholders

Overrides PlaceholderStrategyInterface::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;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal