[TwigBundle] Workaround a flaw in the design of the configuration (normalization)
This commit is contained in:
parent
55f962d44d
commit
eee5065434
@ -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);
|
||||
|
||||
|
@ -9,6 +9,7 @@ $container->loadFromExtension('twig', array(
|
||||
'globals' => array(
|
||||
'foo' => '@bar',
|
||||
'pi' => 3.14,
|
||||
'bad' => array('key' => 'foo'),
|
||||
),
|
||||
'auto_reload' => true,
|
||||
'autoescape' => true,
|
||||
|
@ -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
|
||||
|
@ -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');
|
||||
|
Reference in New Issue
Block a user