Commit dfc83ee1 authored by Al Munnings's avatar Al Munnings Committed by Jesus Manuel Olivas
Browse files

Issue #3317129: Render error with twig debug enabled

parent bed08e07
Loading
Loading
Loading
Loading
+34 −16
Original line number Diff line number Diff line
@@ -1090,7 +1090,6 @@ class DataManager {
      return;
    }

    $context = new RenderContext();
    $base = '';
    $extension = '';
    foreach ($this->definitions[$type] as $entity) {
@@ -1099,18 +1098,14 @@ class DataManager {
        '#entity' => $entity,
      ];

      $base .= $this->renderer->executeInRenderContext($context, function() use (&$renderableBase) {
        return $this->renderer->render($renderableBase);
      });
      $base .= $this->renderGraphqls($renderableBase);

      $renderableExtension = [
        '#theme' => 'entity_extension',
        '#entity' => $entity,
      ];

      $extension .= $this->renderer->executeInRenderContext($context, function() use (&$renderableExtension) {
        return $this->renderer->render($renderableExtension);
      });
      $extension .= $this->renderGraphqls($renderableExtension);
    }

    if ($type === 'node') {
@@ -1119,18 +1114,14 @@ class DataManager {
        '#entities' => $this->definitions[$type],
      ];

      $base .= $this->renderer->executeInRenderContext($context, function() use (&$renderableBase) {
        return $this->renderer->render($renderableBase);
      });
      $base .= $this->renderGraphqls($renderableBase);

      $renderableExtension = [
        '#theme' => 'entity_extension_content',
        '#entities' => $this->definitions[$type],
      ];

      $extension .= $this->renderer->executeInRenderContext($context, function() use (&$renderableExtension) {
        return $this->renderer->render($renderableExtension);
      });
      $extension .= $this->renderGraphqls($renderableExtension);
    }

    $this->sdl[$type] = [
@@ -1394,15 +1385,42 @@ class DataManager {
  }

  public function getFragmentsAsSdl() {
    $context = new RenderContext();
    $renderArray = [
      '#theme' => 'entity_fragments',
      '#entities' => \Drupal::service('graphql_compose.datamanager')->getFragments(),
      '#showWrappers' => FALSE,
    ];

    return \Drupal::service('renderer')->executeInRenderContext($context, function() use (&$renderArray) {
      return \Drupal::service('renderer')->render($renderArray);
    return $this->renderGraphqls($renderArray);
  }

  /**
   * Render wrapper to fix twig debug artifacts
   *
   * @param array $build
   *   Drupal render array.
   * @param null|RenderContext $context
   *   Render context to use.
   *
   * @return mixed
   *   Result of the render.
   */
  public function renderGraphqls(array $build, ?RenderContext $context = null) {
    $twig = \Drupal::service('twig');

    if ($twig_debug = $twig->isDebug()) {
      $twig->disableDebug();
    }

    $context = $context ?: new RenderContext();
    $result = $this->renderer->executeInRenderContext($context, function() use ($build) {
      return $this->renderer->render($build);
    });

    if ($twig_debug) {
      $twig->enableDebug();
    }

    return $result;
  }
}