[TwigBundle] Workaround a flaw in the design of the configuration (normalization)

This commit is contained in:
Victor Berchet 2012-03-09 21:02:20 +01:00
parent 55f962d44d
commit eee5065434
4 changed files with 22 additions and 1 deletions

View File

@ -36,6 +36,19 @@ class TwigExtension extends Extension
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('twig.xml');
foreach ($configs as &$config) {
if (isset($config['globals'])) {
foreach ($config['globals'] as $name => $value) {
if (is_array($value) && isset($value['key'])) {
$config['globals'][$name] = array(
'key' => $name,
'value' => $config['globals'][$name]
);
}
}
}
}
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);

View File

@ -9,6 +9,7 @@ $container->loadFromExtension('twig', array(
'globals' => array(
'foo' => '@bar',
'pi' => 3.14,
'bad' => array('key' => 'foo'),
),
'auto_reload' => true,
'autoescape' => true,

View File

@ -3,8 +3,9 @@ twig:
resources:
- MyBundle::form.html.twig
globals:
foo: @bar
foo: "@bar"
pi: 3.14
bad: {key: foo}
auto_reload: true
autoescape: true
base_template_class: stdClass

View File

@ -64,6 +64,12 @@ class TwigExtensionTest extends TestCase
$this->assertEquals('pi', $calls[1][1][0], '->load() registers variables as Twig globals');
$this->assertEquals(3.14, $calls[1][1][1], '->load() registers variables as Twig globals');
// Yaml and Php specific configs
if (in_array($format, array('yml', 'php'))) {
$this->assertEquals('bad', $calls[2][1][0], '->load() registers variables as Twig globals');
$this->assertEquals(array('key' => 'foo'), $calls[2][1][1], '->load() registers variables as Twig globals');
}
// Twig options
$options = $container->getParameter('twig.options');
$this->assertTrue($options['auto_reload'], '->load() sets the auto_reload option');