Navigation Menu

Skip to content

Commit

Permalink
[TwigBridge] Added a TwigEngine in the bridge
Browse files Browse the repository at this point in the history
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
stof committed Apr 2, 2012
1 parent 275267f commit dbab7e1
Show file tree
Hide file tree
Showing 2 changed files with 132 additions and 78 deletions.
127 changes: 127 additions & 0 deletions src/Symfony/Bridge/Twig/TwigEngine.php
@@ -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);
}
}
}
83 changes: 5 additions & 78 deletions src/Symfony/Bundle/TwigBundle/TwigEngine.php
Expand Up @@ -11,23 +11,21 @@

namespace Symfony\Bundle\TwigBundle;

use Symfony\Bridge\Twig\TwigEngine as BaseEngine;
use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface;
use Symfony\Bundle\FrameworkBundle\Templating\GlobalVariables;
use Symfony\Bundle\FrameworkBundle\Templating\TemplateReference;
use Symfony\Component\Templating\TemplateNameParserInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Config\FileLocatorInterface;
use Symfony\Component\Templating\StreamingEngineInterface;

/**
* This engine knows how to render Twig templates.
*
* @author Fabien Potencier <fabien@symfony.com>
*/
class TwigEngine implements EngineInterface, StreamingEngineInterface
class TwigEngine extends BaseEngine implements EngineInterface
{
protected $environment;
protected $parser;
protected $locator;

/**
Expand All @@ -40,8 +38,8 @@ class TwigEngine implements EngineInterface, StreamingEngineInterface
*/
public function __construct(\Twig_Environment $environment, TemplateNameParserInterface $parser, FileLocatorInterface $locator, GlobalVariables $globals = null)
{
$this->environment = $environment;
$this->parser = $parser;
parent::__construct($environment, $parser);

$this->locator = $locator;

if (null !== $globals) {
Expand All @@ -63,7 +61,7 @@ public function __construct(\Twig_Environment $environment, TemplateNameParserIn
public function render($name, array $parameters = array())
{
try {
return $this->load($name)->render($parameters);
return parent::render($name, $parameters);
} catch (\Twig_Error $e) {
if ($name instanceof TemplateReference) {
try {
Expand All @@ -77,55 +75,6 @@ public function render($name, array $parameters = array())
}
}

/**
* 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');
}

/**
* Renders a view and returns a Response.
*
Expand All @@ -145,26 +94,4 @@ public function renderResponse($view, array $parameters = array(), Response $res

return $response;
}

/**
* 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);
}
}
}

0 comments on commit dbab7e1

Please sign in to comment.