diff --git a/src/Controller/RetrofitTitleResolver.php b/src/Controller/RetrofitTitleResolver.php index 9508e64..1fb0d73 100644 --- a/src/Controller/RetrofitTitleResolver.php +++ b/src/Controller/RetrofitTitleResolver.php @@ -6,26 +6,32 @@ use Drupal\Core\Controller\TitleResolverInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Routing\Route; final class RetrofitTitleResolver implements TitleResolverInterface { - private string $storedTitle = ''; + /** + * @var \SplObjectStorage + */ + private $titles; public function __construct( private readonly TitleResolverInterface $inner, + private readonly RequestStack $requestStack, ) { + $this->titles = new \SplObjectStorage(); } public function setStoredTitle(string $title): void { - $this->storedTitle = $title; + $this->titles[$this->requestStack->getCurrentRequest()] = $title; } public function getTitle(Request $request, Route $route): array|string|\Stringable|null { - if ($this->storedTitle !== '') { - return $this->storedTitle; + if (isset($this->titles[$request])) { + return $this->titles[$request]; } return $this->inner->getTitle($request, $route); } diff --git a/src/Provider.php b/src/Provider.php index f83a8ad..f30af73 100644 --- a/src/Provider.php +++ b/src/Provider.php @@ -122,7 +122,8 @@ public function register(ContainerBuilder $container) $container->register(RetrofitTitleResolver::class) ->setDecoratedService('title_resolver') - ->addArgument(new Reference(RetrofitTitleResolver::class . '.inner')); + ->addArgument(new Reference(RetrofitTitleResolver::class . '.inner')) + ->addArgument(new Reference('request_stack')); $container->setDefinition( FormBuilder::class, diff --git a/tests/src/Integration/RetrofitTitleResolverTest.php b/tests/src/Integration/RetrofitTitleResolverTest.php index 0b70881..12e9dbe 100644 --- a/tests/src/Integration/RetrofitTitleResolverTest.php +++ b/tests/src/Integration/RetrofitTitleResolverTest.php @@ -7,6 +7,7 @@ use mglaman\DrupalTestHelpers\RequestTrait; use Retrofit\Drupal\Controller\RetrofitTitleResolver; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Routing\Route; final class RetrofitTitleResolverTest extends IntegrationTestCase @@ -45,13 +46,17 @@ public function testSetStoredTitle(): void RetrofitTitleResolver::class, $titleResolver ); + $requestStack = $this->container->get('request_stack'); + assert($requestStack instanceof RequestStack); + $request = $requestStack->getCurrentRequest(); + assert($request instanceof Request); self::assertEquals(null, $titleResolver->getTitle( - Request::create('/'), + $request, $this->createMock(Route::class) )); $titleResolver->setStoredTitle('foo'); self::assertEquals('foo', $titleResolver->getTitle( - Request::create('/'), + $request, $this->createMock(Route::class) )); }