* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpKernel\DependencyInjection; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Fragment\FragmentHandler; /** * Lazily loads fragment renderers from the dependency injection container. * * @author Fabien Potencier */ class LazyLoadingFragmentHandler extends FragmentHandler { private $container; private $rendererIds = array(); public function __construct(ContainerInterface $container, $debug = false, RequestStack $requestStack = null) { $this->container = $container; parent::__construct(array(), $debug, $requestStack); } /** * Adds a service as a fragment renderer. * * @param string $renderer The render service id */ public function addRendererService($name, $renderer) { $this->rendererIds[$name] = $renderer; } /** * {@inheritdoc} */ public function render($uri, $renderer = 'inline', array $options = array()) { if (isset($this->rendererIds[$renderer])) { $this->addRenderer($this->container->get($this->rendererIds[$renderer])); unset($this->rendererIds[$renderer]); } return parent::render($uri, $renderer, $options); } }