Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@0: namespace Symfony\Component\Validator\Mapping\Cache; Chris@0: Chris@0: use Psr\Cache\CacheItemPoolInterface; Chris@0: use Symfony\Component\Validator\Mapping\ClassMetadata; Chris@0: Chris@0: /** Chris@0: * PSR-6 adapter. Chris@0: * Chris@0: * @author Kévin Dunglas Chris@0: */ Chris@0: class Psr6Cache implements CacheInterface Chris@0: { Chris@0: private $cacheItemPool; Chris@0: Chris@0: public function __construct(CacheItemPoolInterface $cacheItemPool) Chris@0: { Chris@0: $this->cacheItemPool = $cacheItemPool; Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function has($class) Chris@0: { Chris@0: return $this->cacheItemPool->hasItem($this->escapeClassName($class)); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function read($class) Chris@0: { Chris@0: $item = $this->cacheItemPool->getItem($this->escapeClassName($class)); Chris@0: Chris@0: if (!$item->isHit()) { Chris@0: return false; Chris@0: } Chris@0: Chris@0: return $item->get(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * {@inheritdoc} Chris@0: */ Chris@0: public function write(ClassMetadata $metadata) Chris@0: { Chris@0: $item = $this->cacheItemPool->getItem($this->escapeClassName($metadata->getClassName())); Chris@0: $item->set($metadata); Chris@0: Chris@0: $this->cacheItemPool->save($item); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Replaces backslashes by dots in a class name. Chris@0: * Chris@0: * @param string $class Chris@0: * Chris@0: * @return string Chris@0: */ Chris@0: private function escapeClassName($class) Chris@0: { Chris@18: if (false !== strpos($class, '@')) { Chris@18: // anonymous class: replace all PSR6-reserved characters Chris@18: return str_replace(["\0", '\\', '/', '@', ':', '{', '}', '(', ')'], '.', $class); Chris@18: } Chris@18: Chris@0: return str_replace('\\', '.', $class); Chris@0: } Chris@0: }