Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[TwigBridge] Added a TwigEngine in the bridge
This TwigEngine implements the interface available in the component. the TwigBridge in TwigBundle now extends this class and provides only the additional methods for the FrameworkBundle interface.
- Loading branch information
Showing
2 changed files
with
132 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
<?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\Bridge\Twig; | ||
|
||
use Symfony\Component\HttpFoundation\Response; | ||
use Symfony\Component\Templating\EngineInterface; | ||
use Symfony\Component\Templating\StreamingEngineInterface; | ||
use Symfony\Component\Templating\TemplateNameParserInterface; | ||
|
||
/** | ||
* This engine knows how to render Twig templates. | ||
* | ||
* @author Fabien Potencier <fabien@symfony.com> | ||
*/ | ||
class TwigEngine implements EngineInterface, StreamingEngineInterface | ||
{ | ||
protected $environment; | ||
protected $parser; | ||
|
||
/** | ||
* Constructor. | ||
* | ||
* @param \Twig_Environment $environment A \Twig_Environment instance | ||
* @param TemplateNameParserInterface $parser A TemplateNameParserInterface instance | ||
*/ | ||
public function __construct(\Twig_Environment $environment, TemplateNameParserInterface $parser) | ||
{ | ||
$this->environment = $environment; | ||
$this->parser = $parser; | ||
} | ||
|
||
/** | ||
* Renders a template. | ||
* | ||
* @param mixed $name A template name | ||
* @param array $parameters An array of parameters to pass to the template | ||
* | ||
* @return string The evaluated template as a string | ||
* | ||
* @throws \InvalidArgumentException if the template does not exist | ||
* @throws \RuntimeException if the template cannot be rendered | ||
*/ | ||
public function render($name, array $parameters = array()) | ||
{ | ||
return $this->load($name)->render($parameters); | ||
} | ||
|
||
/** | ||
* Streams a template. | ||
* | ||
* @param mixed $name A template name or a TemplateReferenceInterface instance | ||
* @param array $parameters An array of parameters to pass to the template | ||
* | ||
* @throws \RuntimeException if the template cannot be rendered | ||
*/ | ||
public function stream($name, array $parameters = array()) | ||
{ | ||
$this->load($name)->display($parameters); | ||
} | ||
|
||
/** | ||
* Returns true if the template exists. | ||
* | ||
* @param mixed $name A template name | ||
* | ||
* @return Boolean true if the template exists, false otherwise | ||
*/ | ||
public function exists($name) | ||
{ | ||
try { | ||
$this->load($name); | ||
} catch (\InvalidArgumentException $e) { | ||
return false; | ||
} | ||
|
||
return true; | ||
} | ||
|
||
/** | ||
* Returns true if this class is able to render the given template. | ||
* | ||
* @param string $name A template name | ||
* | ||
* @return Boolean True if this class supports the given resource, false otherwise | ||
*/ | ||
public function supports($name) | ||
{ | ||
if ($name instanceof \Twig_Template) { | ||
return true; | ||
} | ||
|
||
$template = $this->parser->parse($name); | ||
|
||
return 'twig' === $template->get('engine'); | ||
} | ||
|
||
/** | ||
* Loads the given template. | ||
* | ||
* @param mixed $name A template name or an instance of Twig_Template | ||
* | ||
* @return \Twig_TemplateInterface A \Twig_TemplateInterface instance | ||
* | ||
* @throws \InvalidArgumentException if the template does not exist | ||
*/ | ||
protected function load($name) | ||
{ | ||
if ($name instanceof \Twig_Template) { | ||
return $name; | ||
} | ||
|
||
try { | ||
return $this->environment->loadTemplate($name); | ||
} catch (\Twig_Error_Loader $e) { | ||
throw new \InvalidArgumentException($e->getMessage(), $e->getCode(), $e); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters