|
6 | 6 |
|
7 | 7 | use Netzmacht\Contao\Toolkit\Dca\Formatter\Formatter; |
8 | 8 | use Netzmacht\Contao\Toolkit\Dca\Formatter\FormatterFactory; |
| 9 | +use Override; |
9 | 10 | use Symfony\Component\HttpFoundation\RequestStack; |
10 | 11 |
|
11 | | -use function spl_object_hash; |
12 | | - |
13 | 12 | final class RequestScopedManager implements DcaManager |
14 | 13 | { |
15 | | - /** @var array<string, DcaManager> */ |
16 | | - private array $managers = []; |
17 | | - |
18 | 14 | public function __construct( |
19 | 15 | private readonly DcaLoader $loader, |
20 | 16 | private readonly FormatterFactory $formatterFactory, |
21 | 17 | private readonly RequestStack $requestStack, |
22 | 18 | ) { |
23 | 19 | } |
24 | 20 |
|
| 21 | + #[Override] |
25 | 22 | public function getDefinition(string $name, bool $noCache = false): Definition |
26 | 23 | { |
27 | 24 | return $this->getManager()->getDefinition($name, $noCache); |
28 | 25 | } |
29 | 26 |
|
| 27 | + #[Override] |
30 | 28 | public function getFormatter(string $name): Formatter |
31 | 29 | { |
32 | 30 | return $this->getManager()->getFormatter($name); |
33 | 31 | } |
34 | 32 |
|
35 | 33 | private function getManager(): DcaManager |
36 | 34 | { |
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 | + } |
39 | 44 |
|
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); |
41 | 47 |
|
42 | | - return $this->managers[$requestId]; |
| 48 | + return $manager; |
43 | 49 | } |
44 | 50 | } |
0 commit comments