-
Notifications
You must be signed in to change notification settings - Fork 9
/
Configuration.php
99 lines (88 loc) · 3.63 KB
/
Configuration.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
/*
* This file is part of the Mustache.php bundle for Symfony2.
*
* (c) 2012 Justin Hileman
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Bobthecow\Bundle\MustacheBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
/**
* MustacheExtension configuration structure.
*/
class Configuration implements ConfigurationInterface
{
/**
* Generates the configuration tree builder.
*
* @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('mustache');
// $rootNode->setInfo('Mustache Configuration');
$this->addGlobalsSection($rootNode);
$this->addMustacheOptions($rootNode);
return $treeBuilder;
}
private function addGlobalsSection(ArrayNodeDefinition $rootNode)
{
$rootNode
->fixXmlConfig('global')
->children()
->arrayNode('globals')
->useAttributeAsKey('key')
->example(array('foo' => '"@bar"', 'pi' => 3.14))
->prototype('array')
->beforeNormalization()
->ifTrue(function ($v) { return is_string($v) && 0 === strpos($v, '@'); })
->then(function ($v) { return array('id' => substr($v, 1), 'type' => 'service'); })
->end()
->beforeNormalization()
->ifTrue(function ($v) {
if (is_array($v)) {
$keys = array_keys($v);
sort($keys);
return $keys !== array('id', 'type') && $keys !== array('value');
}
return true;
})
->then(function ($v) { return array('value' => $v); })
->end()
->children()
->scalarNode('id')->end()
->scalarNode('type')
->validate()
->ifNotInArray(array('service'))
->thenInvalid('The %s type is not supported')
->end()
->end()
->variableNode('value')->end()
->end()
->end()
->end()
->end()
;
}
private function addMustacheOptions(ArrayNodeDefinition $rootNode)
{
$rootNode
->children()
->scalarNode('template_class_prefix')->example('__Mustache_')->end()
->scalarNode('template_base_class')->example('Mustache_Template')->end()
->scalarNode('cache')->defaultValue('%kernel.cache_dir%/mustache')->end()
->scalarNode('loader_id')->defaultValue('mustache.loader')->end()
->scalarNode('partials_loader_id')->defaultValue('mustache.loader')->end()
->scalarNode('charset')->defaultValue('%kernel.charset%')->end()
->arrayNode('pragmas')
->prototype('scalar')->end()
->end()
->end()
;
}
}