D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
psa
/
admin
/
plib
/
vendor
/
jms
/
serializer
/
src
/
Handler
/
Filename :
LazyHandlerRegistry.php
back
Copy
<?php declare(strict_types=1); namespace JMS\Serializer\Handler; use JMS\Serializer\Exception\InvalidArgumentException; use Psr\Container\ContainerInterface as PsrContainerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; final class LazyHandlerRegistry extends HandlerRegistry { /** * @var PsrContainerInterface|ContainerInterface */ private $container; /** * @var array */ private $initializedHandlers = []; /** * @param PsrContainerInterface|ContainerInterface $container * @param array $handlers */ public function __construct($container, array $handlers = []) { if (!$container instanceof PsrContainerInterface && !$container instanceof ContainerInterface) { throw new InvalidArgumentException(sprintf('The container must be an instance of %s or %s (%s given).', PsrContainerInterface::class, ContainerInterface::class, \is_object($container) ? \get_class($container) : \gettype($container))); } parent::__construct($handlers); $this->container = $container; } /** * {@inheritdoc} */ public function registerHandler(int $direction, string $typeName, string $format, $handler): void { parent::registerHandler($direction, $typeName, $format, $handler); unset($this->initializedHandlers[$direction][$typeName][$format]); } /** * {@inheritdoc} */ public function getHandler(int $direction, string $typeName, string $format) { if (isset($this->initializedHandlers[$direction][$typeName][$format])) { return $this->initializedHandlers[$direction][$typeName][$format]; } if (!isset($this->handlers[$direction][$typeName][$format])) { return null; } $handler = $this->handlers[$direction][$typeName][$format]; if (\is_array($handler) && \is_string($handler[0]) && $this->container->has($handler[0])) { $handler[0] = $this->container->get($handler[0]); } return $this->initializedHandlers[$direction][$typeName][$format] = $handler; } }