2011-01-13 13:58:17 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2011-01-13 13:58:17 +00:00
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2011-01-15 13:29:43 +00:00
namespace Symfony\Bundle\TwigBundle ;
2012-04-02 17:28:35 +01:00
use Symfony\Bridge\Twig\TwigEngine as BaseEngine ;
2011-01-15 13:29:43 +00:00
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface ;
2011-11-07 19:03:35 +00:00
use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference ;
2011-01-26 13:53:12 +00:00
use Symfony\Component\Templating\TemplateNameParserInterface ;
2011-01-15 13:29:43 +00:00
use Symfony\Component\HttpFoundation\Response ;
2011-11-07 19:03:35 +00:00
use Symfony\Component\Config\FileLocatorInterface ;
2011-01-15 13:29:43 +00:00
2011-01-13 13:58:17 +00:00
/**
2012-05-16 19:34:56 +01:00
* This engine renders Twig templates .
2011-01-13 13:58:17 +00:00
*
2011-03-06 11:40:06 +00:00
* @ author Fabien Potencier < fabien @ symfony . com >
2011-01-13 13:58:17 +00:00
*/
2012-04-02 17:28:35 +01:00
class TwigEngine extends BaseEngine implements EngineInterface
2011-01-13 13:58:17 +00:00
{
2011-11-07 19:03:35 +00:00
protected $locator ;
2011-01-13 13:58:17 +00:00
/**
* Constructor .
*
2011-01-26 13:53:12 +00:00
* @ param \Twig_Environment $environment A \Twig_Environment instance
* @ param TemplateNameParserInterface $parser A TemplateNameParserInterface instance
2012-01-11 14:52:51 +00:00
* @ param FileLocatorInterface $locator A FileLocatorInterface instance
2011-01-13 13:58:17 +00:00
*/
2012-10-13 16:03:39 +01:00
public function __construct ( \Twig_Environment $environment , TemplateNameParserInterface $parser , FileLocatorInterface $locator )
2011-01-13 13:58:17 +00:00
{
2012-04-02 17:28:35 +01:00
parent :: __construct ( $environment , $parser );
2011-11-07 19:03:35 +00:00
$this -> locator = $locator ;
2011-01-13 13:58:17 +00:00
}
2014-12-28 16:28:19 +00:00
/**
2015-01-04 12:37:24 +00:00
* @ deprecated since version 2.7 , to be removed in 3.0 .
2014-12-30 12:40:50 +00:00
* Inject the escaping strategy on \Twig_Environment instead .
2014-12-28 16:28:19 +00:00
*/
2012-04-25 11:11:28 +01:00
public function setDefaultEscapingStrategy ( $strategy )
{
2015-01-04 12:37:24 +00:00
trigger_error ( 'The ' . __METHOD__ . ' method is deprecated since version 2.7 and will be removed in 3.0. Inject the escaping strategy in the Twig_Environment object instead.' , E_USER_DEPRECATED );
2015-01-04 00:21:40 +00:00
2012-04-25 11:11:28 +01:00
$this -> environment -> getExtension ( 'escaper' ) -> setDefaultStrategy ( $strategy );
}
2014-12-28 16:28:19 +00:00
/**
2015-01-04 12:37:24 +00:00
* @ deprecated since version 2.7 , to be removed in 3.0 .
2015-01-13 11:21:48 +00:00
* Use the 'filename' strategy instead .
2014-12-28 16:28:19 +00:00
*/
2012-04-25 11:11:28 +01:00
public function guessDefaultEscapingStrategy ( $filename )
{
2015-01-13 11:21:48 +00:00
trigger_error ( 'The ' . __METHOD__ . ' method is deprecated since version 2.7 and will be removed in 3.0. Use the Twig_FileExtensionEscapingStrategy::guess method instead.' , E_USER_DEPRECATED );
2015-01-04 00:21:40 +00:00
2015-01-13 11:21:48 +00:00
return \Twig_FileExtensionEscapingStrategy :: guess ( $filename );
2012-04-25 11:11:28 +01:00
}
2011-01-13 13:58:17 +00:00
/**
2013-09-04 13:01:22 +01:00
* { @ inheritdoc }
2011-01-13 13:58:17 +00:00
*/
public function render ( $name , array $parameters = array ())
{
2011-11-07 19:03:35 +00:00
try {
2012-04-02 17:28:35 +01:00
return parent :: render ( $name , $parameters );
2011-11-07 20:15:36 +00:00
} catch ( \Twig_Error $e ) {
2011-11-07 19:03:35 +00:00
if ( $name instanceof TemplateReference ) {
try {
// try to get the real file name of the template where the error occurred
$e -> setTemplateFile ( sprintf ( '%s' , $this -> locator -> locate ( $this -> parser -> parse ( $e -> getTemplateFile ()))));
} catch ( \Exception $ex ) {
}
}
throw $e ;
}
2011-01-13 13:58:17 +00:00
}
/**
2013-09-04 13:01:22 +01:00
* { @ inheritdoc }
2011-01-13 13:58:17 +00:00
*
2013-09-04 13:01:22 +01:00
* @ throws \Twig_Error if something went wrong like a thrown exception while rendering the template
2011-01-13 13:58:17 +00:00
*/
public function renderResponse ( $view , array $parameters = array (), Response $response = null )
{
if ( null === $response ) {
2011-02-21 16:26:35 +00:00
$response = new Response ();
2011-01-13 13:58:17 +00:00
}
$response -> setContent ( $this -> render ( $view , $parameters ));
return $response ;
}
}