Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 /*
|
Chris@0
|
4 * This file is part of the Symfony package.
|
Chris@0
|
5 *
|
Chris@0
|
6 * (c) Fabien Potencier <fabien@symfony.com>
|
Chris@0
|
7 *
|
Chris@0
|
8 * For the full copyright and license information, please view the LICENSE
|
Chris@0
|
9 * file that was distributed with this source code.
|
Chris@0
|
10 */
|
Chris@0
|
11
|
Chris@0
|
12 namespace Symfony\Component\Serializer\Mapping\Factory;
|
Chris@0
|
13
|
Chris@0
|
14 use Psr\Cache\CacheItemPoolInterface;
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * Caches metadata using a PSR-6 implementation.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @author Kévin Dunglas <dunglas@gmail.com>
|
Chris@0
|
20 */
|
Chris@0
|
21 class CacheClassMetadataFactory implements ClassMetadataFactoryInterface
|
Chris@0
|
22 {
|
Chris@0
|
23 use ClassResolverTrait;
|
Chris@0
|
24
|
Chris@0
|
25 /**
|
Chris@0
|
26 * @var ClassMetadataFactoryInterface
|
Chris@0
|
27 */
|
Chris@0
|
28 private $decorated;
|
Chris@0
|
29
|
Chris@0
|
30 /**
|
Chris@0
|
31 * @var CacheItemPoolInterface
|
Chris@0
|
32 */
|
Chris@0
|
33 private $cacheItemPool;
|
Chris@0
|
34
|
Chris@0
|
35 public function __construct(ClassMetadataFactoryInterface $decorated, CacheItemPoolInterface $cacheItemPool)
|
Chris@0
|
36 {
|
Chris@0
|
37 $this->decorated = $decorated;
|
Chris@0
|
38 $this->cacheItemPool = $cacheItemPool;
|
Chris@0
|
39 }
|
Chris@0
|
40
|
Chris@0
|
41 /**
|
Chris@0
|
42 * {@inheritdoc}
|
Chris@0
|
43 */
|
Chris@0
|
44 public function getMetadataFor($value)
|
Chris@0
|
45 {
|
Chris@0
|
46 $class = $this->getClass($value);
|
Chris@0
|
47 // Key cannot contain backslashes according to PSR-6
|
Chris@0
|
48 $key = strtr($class, '\\', '_');
|
Chris@0
|
49
|
Chris@0
|
50 $item = $this->cacheItemPool->getItem($key);
|
Chris@0
|
51 if ($item->isHit()) {
|
Chris@0
|
52 return $item->get();
|
Chris@0
|
53 }
|
Chris@0
|
54
|
Chris@0
|
55 $metadata = $this->decorated->getMetadataFor($value);
|
Chris@0
|
56 $this->cacheItemPool->save($item->set($metadata));
|
Chris@0
|
57
|
Chris@0
|
58 return $metadata;
|
Chris@0
|
59 }
|
Chris@0
|
60
|
Chris@0
|
61 /**
|
Chris@0
|
62 * {@inheritdoc}
|
Chris@0
|
63 */
|
Chris@0
|
64 public function hasMetadataFor($value)
|
Chris@0
|
65 {
|
Chris@0
|
66 return $this->decorated->hasMetadataFor($value);
|
Chris@0
|
67 }
|
Chris@0
|
68 }
|