From e7bb6157e693d95096665ecc6d674e579307a49d Mon Sep 17 00:00:00 2001 From: catch <6915-catch@users.noreply.drupalcode.org> Date: Mon, 10 Mar 2025 19:26:08 +0000 Subject: [PATCH] Issue #3497935 by prudloff, smustgrave: Renderer::getCurrentRenderContext() triggers a TypeError when there is no current request --- core/lib/Drupal/Core/Render/Renderer.php | 5 +++++ .../Drupal/Tests/Core/Render/RendererTest.php | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php index 7c54caf331f..1383c4261b4 100644 --- a/core/lib/Drupal/Core/Render/Renderer.php +++ b/core/lib/Drupal/Core/Render/Renderer.php @@ -607,6 +607,11 @@ class Renderer implements RendererInterface { */ protected function getCurrentRenderContext() { $request = $this->requestStack->getCurrentRequest(); + + if (is_null($request)) { + return NULL; + } + return static::$contextCollection[$request] ?? NULL; } diff --git a/core/tests/Drupal/Tests/Core/Render/RendererTest.php b/core/tests/Drupal/Tests/Core/Render/RendererTest.php index 953a0090698..f6eb9b74598 100644 --- a/core/tests/Drupal/Tests/Core/Render/RendererTest.php +++ b/core/tests/Drupal/Tests/Core/Render/RendererTest.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Drupal\Tests\Core\Render; +use Drupal\Core\Render\RenderContext; use Drupal\Component\Render\MarkupInterface; use Drupal\Core\Access\AccessResult; use Drupal\Core\Access\AccessResultInterface; @@ -1074,6 +1075,23 @@ class RendererTest extends RendererTestBase { ]; } + /** + * @covers ::hasRenderContext + */ + public function testHasRenderContext(): void { + // Tests with no render context. + $this->assertFalse($this->renderer->hasRenderContext()); + + // Tests in a render context. + $this->renderer->executeInRenderContext(new RenderContext(), function () { + $this->assertTrue($this->renderer->hasRenderContext()); + }); + + // Test that the method works with no current request. + $this->requestStack->pop(); + $this->assertFalse($this->renderer->hasRenderContext()); + } + } /**