Skip to content

Commit 716f7df

Browse files
committed
Refactor RequestScopedManager to improve request handling and replace internal caching mechanism.
1 parent 0b2ed49 commit 716f7df

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

src/Dca/RequestScopedManager.php

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,39 +6,45 @@
66

77
use Netzmacht\Contao\Toolkit\Dca\Formatter\Formatter;
88
use Netzmacht\Contao\Toolkit\Dca\Formatter\FormatterFactory;
9+
use Override;
910
use Symfony\Component\HttpFoundation\RequestStack;
1011

11-
use function spl_object_hash;
12-
1312
final class RequestScopedManager implements DcaManager
1413
{
15-
/** @var array<string, DcaManager> */
16-
private array $managers = [];
17-
1814
public function __construct(
1915
private readonly DcaLoader $loader,
2016
private readonly FormatterFactory $formatterFactory,
2117
private readonly RequestStack $requestStack,
2218
) {
2319
}
2420

21+
#[Override]
2522
public function getDefinition(string $name, bool $noCache = false): Definition
2623
{
2724
return $this->getManager()->getDefinition($name, $noCache);
2825
}
2926

27+
#[Override]
3028
public function getFormatter(string $name): Formatter
3129
{
3230
return $this->getManager()->getFormatter($name);
3331
}
3432

3533
private function getManager(): DcaManager
3634
{
37-
$request = $this->requestStack->getCurrentRequest();
38-
$requestId = $request ? spl_object_hash($request) : '__empty__';
35+
$request = $this->requestStack->getCurrentRequest();
36+
if ($request === null) {
37+
return new Manager($this->loader, $this->formatterFactory);
38+
}
39+
40+
$manager = $request->attributes->get(DcaManager::class);
41+
if ($manager instanceof DcaManager) {
42+
return $manager;
43+
}
3944

40-
$this->managers[$requestId] ??= new Manager($this->loader, $this->formatterFactory);
45+
$manager = new Manager($this->loader, $this->formatterFactory);
46+
$request->attributes->set(DcaManager::class, $manager);
4147

42-
return $this->managers[$requestId];
48+
return $manager;
4349
}
4450
}

0 commit comments

Comments
 (0)