Skip to content

Commit

Permalink
changed templating to use setter injection for renderers
Browse files Browse the repository at this point in the history
  • Loading branch information
lsmith77 authored and fabpot committed Jan 7, 2011
1 parent 5390b16 commit f2ac2a4
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 18 deletions.
Expand Up @@ -30,11 +30,12 @@ public function process(ContainerBuilder $container)

$definition = $container->getDefinition('templating.engine');
$arguments = $definition->getArguments();
$arguments[2] = $renderers;
$definition->setArguments($arguments);

$definition->addMethodCall('setRenderers', array($renderers));

if (count($helpers) > 0) {
$definition->addMethodCall('setHelpers', array($helpers));
}
}
}
}
Expand Up @@ -29,7 +29,6 @@
<service id="templating.engine" class="%templating.engine.class%" public="false">
<argument type="service" id="service_container" />
<argument type="service" id="templating.loader" />
<argument type="collection" />
<call method="setCharset"><argument>%kernel.charset%</argument></call>
</service>

Expand Down
4 changes: 2 additions & 2 deletions src/Symfony/Bundle/FrameworkBundle/Templating/Engine.php
Expand Up @@ -32,11 +32,11 @@ class Engine extends BaseEngine
* @param LoaderInterface $loader A loader instance
* @param array $renderers All templating renderers
*/
public function __construct(ContainerInterface $container, LoaderInterface $loader, array $renderers)
public function __construct(ContainerInterface $container, LoaderInterface $loader)
{
$this->container = $container;

parent::__construct($loader, $renderers);
parent::__construct($loader);
}

public function getContainer()
Expand Down
22 changes: 12 additions & 10 deletions src/Symfony/Component/Templating/Engine.php
Expand Up @@ -39,14 +39,11 @@ class Engine implements \ArrayAccess
* Constructor.
*
* @param LoaderInterface $loader A loader instance
* @param array $renderers An array of renderer instances
* @param array $helpers A array of helper instances
* @param array $escapers An array of escapers
*/
public function __construct(LoaderInterface $loader, array $renderers = array(), array $helpers = array(), array $escapers = array())
public function __construct(LoaderInterface $loader, array $helpers = array())
{
$this->loader = $loader;
$this->renderers = $renderers;
$this->helpers = array();
$this->parents = array();
$this->stack = array();
Expand All @@ -56,19 +53,24 @@ public function __construct(LoaderInterface $loader, array $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->initializeEscapers();

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

/**
Expand Down
10 changes: 7 additions & 3 deletions tests/Symfony/Tests/Component/Templating/EngineTest.php
Expand Up @@ -35,13 +35,17 @@ public function testConstructor()
{
$engine = new ProjectTemplateEngine(self::$loader);
$this->assertEquals(self::$loader, $engine->getLoader(), '__construct() takes a loader instance as its second first argument');
$this->assertEquals(array('php'), array_keys($engine->getRenderers()), '__construct() automatically registers a PHP renderer if none is given');
}

$engine = new ProjectTemplateEngine(self::$loader, array('foo' => self::$renderer));
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, array('php' => self::$renderer));
$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');
}

Expand Down

0 comments on commit f2ac2a4

Please sign in to comment.