made PHP renderer optional in Templating

This commit is contained in:
Fabien Potencier 2011-01-07 15:28:12 +01:00
parent f2ac2a4c8a
commit bc2ca8f1cf
3 changed files with 18 additions and 20 deletions

View File

@ -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>
@ -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" />

View File

@ -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;
@ -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())
{
@ -50,11 +49,11 @@ class Engine implements \ArrayAccess
$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);
}
@ -62,14 +61,9 @@ class Engine implements \ArrayAccess
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);
}
}

View File

@ -41,12 +41,8 @@ class EngineTest extends \PHPUnit_Framework_TestCase
{
$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()
@ -106,13 +102,15 @@ class EngineTest extends \PHPUnit_Framework_TestCase
$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 ?>');
@ -149,6 +147,7 @@ class EngineTest extends \PHPUnit_Framework_TestCase
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; ?>');