Skip to content
Snippets Groups Projects
Verified Commit b3238209 authored by Dave Long's avatar Dave Long
Browse files

Issue #3513928 by catch, kristiaanvandeneynde: Recursively replace placeholders in CachedStrategy

parent 0b47ac36
Branches
Tags
3 merge requests!5423Draft: Resolve #3329907 "Test2",!3478Issue #3337882: Deleted menus are not removed from content type config,!579Issue #2230909: Simple decimals fail to pass validation
Pipeline #490948 passed
Pipeline: drupal

#490949

    ......@@ -21,7 +21,41 @@ public function __construct(
    * {@inheritdoc}
    */
    public function processPlaceholders(array $placeholders) {
    return $this->renderCache->getMultiple($placeholders);
    $return = $this->renderCache->getMultiple($placeholders);
    if ($return) {
    $return = $this->processNestedPlaceholders($return);
    }
    return $return;
    }
    /**
    * Fetch any nested placeholders from cache.
    *
    * Placeholders returned from cache may have placeholders in #attached, which
    * can themselves be fetched from the cache. By recursively processing the
    * placeholders here, we're able to use multiple cache get to fetch the cache
    * items at each level of recursion.
    */
    private function processNestedPlaceholders(array $placeholders): array {
    $sets = [];
    foreach ($placeholders as $key => $placeholder) {
    if (!empty($placeholder['#attached']['placeholders'])) {
    $sets[] = $placeholder['#attached']['placeholders'];
    }
    }
    if ($sets) {
    $cached = $this->renderCache->getMultiple(...array_merge($sets));
    if ($cached) {
    $cached = $this->processNestedPlaceholders($cached);
    foreach ($placeholders as $key => $placeholder) {
    if (!empty($placeholder['#attached']['placeholders'])) {
    $placeholders[$key]['#attached']['placeholders'] = array_replace($placeholder['#attached']['placeholders'], $cached);
    }
    }
    }
    }
    return $placeholders;
    }
    }
    ......@@ -73,14 +73,14 @@ public function testLogin(): void {
    $expected = [
    'QueryCount' => 4,
    'CacheGetCount' => 49,
    'CacheGetCount' => 48,
    'CacheGetCountByBin' => [
    'config' => 11,
    'data' => 4,
    'discovery' => 10,
    'bootstrap' => 6,
    'dynamic_page_cache' => 1,
    'render' => 16,
    'render' => 15,
    'menu' => 1,
    ],
    'CacheSetCount' => 2,
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment