Skip to content

Commit

Permalink
made PHP renderer optional in Templating
Browse files Browse the repository at this point in the history
  • Loading branch information
fabpot committed Jan 7, 2011
1 parent f2ac2a4 commit bc2ca8f
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
<parameter key="templating.assets.version">null</parameter>
<parameter key="templating.assets.base_urls" type="collection"></parameter>
<parameter key="templating.name_converter.class">Symfony\Bundle\FrameworkBundle\Templating\TemplateNameConverter</parameter>
<parameter key="templating.renderer.php.class">Symfony\Component\Templating\Renderer\PhpRenderer</parameter>
<parameter key="debug.file_link_format">null</parameter>
</parameters>

Expand Down Expand Up @@ -103,6 +104,10 @@
<argument type="service" id="service_container" />
</service>

<service id="templating.renderer.php" class="%templating.renderer.php.class%">
<tag name="templating.renderer" alias="php" />
</service>

<service id="templating.loader" alias="templating.loader.filesystem" />

<service id="templating" alias="templating.engine" />
Expand Down
18 changes: 6 additions & 12 deletions src/Symfony/Component/Templating/Engine.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace Symfony\Component\Templating;

use Symfony\Component\Templating\Loader\LoaderInterface;
use Symfony\Component\Templating\Renderer\PhpRenderer;
use Symfony\Component\Templating\Renderer\RendererInterface;
use Symfony\Component\Templating\Helper\HelperInterface;

Expand Down Expand Up @@ -38,8 +37,8 @@ class Engine implements \ArrayAccess
/**
* Constructor.
*
* @param LoaderInterface $loader A loader instance
* @param array $helpers A array of helper instances
* @param LoaderInterface $loader A loader instance
* @param array $helpers An array of helper instances
*/
public function __construct(LoaderInterface $loader, array $helpers = array())
{
Expand All @@ -50,26 +49,21 @@ public function __construct(LoaderInterface $loader, array $helpers = array())
$this->charset = 'UTF-8';
$this->cache = array();
$this->globals = array();
$this->renderers = array();

$this->addHelpers($helpers);

$this->initializeEscapers();

foreach ($this->escapers as $context => $escaper) {
$this->setEscaper($context, $escaper);
}
}

public function setRenderers(array $renderers = array())
{
$this->renderers = $renderers;

if (!isset($this->renderers['php'])) {
$this->renderers['php'] = new PhpRenderer();
}

foreach ($this->renderers as $renderer) {
$renderer->setEngine($this);
$this->renderers = array();
foreach ($renderers as $name => $renderer) {
$this->setRenderer($name, $renderer);
}
}

Expand Down
15 changes: 7 additions & 8 deletions tests/Symfony/Tests/Component/Templating/EngineTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,8 @@ public function testSetRenderers()
{
$engine = new ProjectTemplateEngine(self::$loader);
$engine->setRenderers(array('foo' => self::$renderer));
$this->assertEquals(array('foo', 'php'), array_keys($engine->getRenderers()), '__construct() takes an array of renderers as its third argument');
$this->assertTrue(self::$renderer->getEngine() === $engine, '__construct() registers itself on all renderers');

$engine = new ProjectTemplateEngine(self::$loader);
$engine->setRenderers(array('php' => self::$renderer));
$this->assertTrue($engine->getRenderers() === array('php' => self::$renderer), '__construct() can overridde the default PHP renderer');
$this->assertEquals(array('foo'), array_keys($engine->getRenderers()));
$this->assertTrue(self::$renderer->getEngine() === $engine, 'setRenderers() registers itself on all renderers');
}

public function testOffsetGet()
Expand Down Expand Up @@ -106,13 +102,15 @@ public function testExtendRender()
$this->assertEquals('The template "foo:name" does not exist (renderer: name).', $e->getMessage(), '->render() throws an InvalidArgumentException if no renderer is registered for the given renderer');
}

$engine = new ProjectTemplateEngine(self::$loader, array(), array(new SlotsHelper()));
$engine = new ProjectTemplateEngine(self::$loader, array(new SlotsHelper()));
$engine->setRenderer('php', new PhpRenderer());
$engine->set(new \SimpleHelper('bar'));
self::$loader->setTemplate('foo.php', '<?php $view->extend("layout"); echo $view[\'foo\'].$foo ?>');
self::$loader->setTemplate('layout.php', '-<?php echo $view[\'slots\']->get("_content") ?>-');
$this->assertEquals('-barfoo-', $engine->render('foo', array('foo' => 'foo')), '->render() uses the decorator to decorate the template');

$engine = new ProjectTemplateEngine(self::$loader, array(), array(new SlotsHelper()));
$engine = new ProjectTemplateEngine(self::$loader, array(new SlotsHelper()));
$engine->setRenderer('php', new PhpRenderer());
$engine->set(new \SimpleHelper('bar'));
self::$loader->setTemplate('bar.php', 'bar');
self::$loader->setTemplate('foo.php', '<?php $view->extend("layout"); echo $foo ?>');
Expand Down Expand Up @@ -149,6 +147,7 @@ public function testGlobalVariables()
public function testGlobalsGetPassedToTemplate()
{
$engine = new ProjectTemplateEngine(self::$loader);
$engine->setRenderer('php', new PhpRenderer());
$engine->addGlobal('global', 'global variable');

self::$loader->setTemplate('global.php', '<?php echo $global; ?>');
Expand Down

0 comments on commit bc2ca8f

Please sign in to comment.