2015-08-18 00:00:26 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* 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 < fabien @ symfony . com >
*/
class LazyLoadingFragmentHandler extends FragmentHandler
{
private $container ;
private $rendererIds = array ();
2016-04-20 16:56:34 +00:00
/**
* Constructor .
*
* RequestStack will become required in 3.0 .
*
* @ param ContainerInterface $container A container
* @ param RequestStack $requestStack The Request stack that controls the lifecycle of requests
* @ param bool $debug Whether the debug mode is enabled or not
*/
public function __construct ( ContainerInterface $container , $requestStack = null , $debug = false )
2015-08-18 00:00:26 +00:00
{
$this -> container = $container ;
2016-04-20 16:56:34 +00:00
if (( null !== $requestStack && ! $requestStack instanceof RequestStack ) || $debug instanceof RequestStack ) {
$tmp = $debug ;
$debug = $requestStack ;
$requestStack = func_num_args () < 3 ? null : $tmp ;
@ trigger_error ( 'The ' . __METHOD__ . ' method now requires a RequestStack to be given as second argument as ' . __CLASS__ . '::setRequest method will not be supported anymore in 3.0.' , E_USER_DEPRECATED );
} elseif ( ! $requestStack instanceof RequestStack ) {
@ trigger_error ( 'The ' . __METHOD__ . ' method now requires a RequestStack instance as ' . __CLASS__ . '::setRequest method will not be supported anymore in 3.0.' , E_USER_DEPRECATED );
}
parent :: __construct ( $requestStack , array (), $debug );
2015-08-18 00:00:26 +00:00
}
/**
* Adds a service as a fragment renderer .
*
2017-02-03 00:28:38 +00:00
* @ param string $name The service name
2015-08-18 00:00:26 +00:00
* @ 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 );
}
}