1010namespace Propel \Bundle \PropelBundle \DependencyInjection ;
1111
1212use Symfony \Component \Config \Definition \Builder \ArrayNodeDefinition ;
13+ use Symfony \Component \Config \Definition \Builder \NodeDefinition ;
1314use Symfony \Component \Config \Definition \Builder \TreeBuilder ;
1415use Symfony \Component \Config \Definition \ConfigurationInterface ;
16+ use Symfony \Component \HttpKernel \Kernel ;
1517
1618/**
1719* This class contains the configuration information for the bundle
@@ -38,12 +40,20 @@ public function __construct($debug)
3840 /**
3941 * Generates the configuration tree builder.
4042 *
41- * @return \Symfony\Component\Config\Definition\Builder\ TreeBuilder The tree builder
43+ * @return TreeBuilder The tree builder
4244 */
4345 public function getConfigTreeBuilder ()
4446 {
47+ if (Kernel::MAJOR_VERSION > 4 || Kernel::MAJOR_VERSION === 4 && Kernel::MINOR_VERSION >= 2 )
48+ {
49+ $ treeBuilder = new TreeBuilder ('propel ' );
50+ $ rootNode = $ treeBuilder ->getRootNode ();
51+ }
52+ else
53+ {
4554 $ treeBuilder = new TreeBuilder ();
4655 $ rootNode = $ treeBuilder ->root ('propel ' );
56+ }
4757
4858 $ this ->addGeneralSection ($ rootNode );
4959 $ this ->addDbalSection ($ rootNode );
@@ -100,6 +110,8 @@ private function addGeneralSection(ArrayNodeDefinition $node)
100110 */
101111 private function addDbalSection (ArrayNodeDefinition $ node )
102112 {
113+ $ dNormalizer = new DriverNormalizer ();
114+ $ dClosure = function ($ v ) use ($ dNormalizer ) { return $ dNormalizer ->normalize ($ v ); };
103115 $ node
104116 ->children ()
105117 ->arrayNode ('dbal ' )
@@ -112,7 +124,7 @@ private function addDbalSection(ArrayNodeDefinition $node)
112124 ->scalarNode ('driver ' )
113125 ->beforeNormalization ()
114126 ->always ()
115- ->then (function ( $ v ) { return str_replace ( ' pdo_ ' , '' , $ v ); } )
127+ ->then ($ dClosure )
116128 ->end ()
117129 ->defaultValue ('mysql ' )
118130 ->end ()
@@ -121,7 +133,7 @@ private function addDbalSection(ArrayNodeDefinition $node)
121133 ->scalarNode ('dsn ' )
122134 ->beforeNormalization ()
123135 ->always ()
124- ->then (function ( $ v ) { return str_replace ( ' pdo_ ' , '' , $ v ); } )
136+ ->then ($ dClosure )
125137 ->end ()
126138 ->defaultValue ('' )
127139 ->end ()
@@ -145,14 +157,14 @@ private function addDbalSection(ArrayNodeDefinition $node)
145157 ->children ()
146158 ->arrayNode ('settings ' )
147159 ->useAttributeAsKey ('key ' )
148- ->prototype ( ' array ' )
160+ ->arrayPrototype ( )
149161 ->useAttributeAsKey ('key ' )
150162 ->prototype ('scalar ' )->end ()
151163 ->end ()
152164 ->end ()
153165 ->end ()
154166 ->fixXmlConfig ('connection ' )
155- ->append ($ this ->getDbalConnectionsNode ())
167+ ->append ($ this ->getDbalConnectionsNode ($ dNormalizer ))
156168 ->end ()
157169 ;
158170 }
@@ -171,22 +183,32 @@ private function addDbalSection(ArrayNodeDefinition $node)
171183 * attributes: {}
172184 * settings: {}
173185 *
174- * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder
186+ * @return ArrayNodeDefinition|NodeDefinition The tree builder
175187 */
176- private function getDbalConnectionsNode ()
188+ private function getDbalConnectionsNode (DriverNormalizer $ normalizer )
177189 {
178- $ treeBuilder = new TreeBuilder ();
179- $ node = $ treeBuilder ->root ('connections ' );
190+ $ closure = function ($ v ) use ($ normalizer ) { return $ normalizer ->normalize ($ v ); };
191+
192+ if (Kernel::MAJOR_VERSION > 4 || Kernel::MAJOR_VERSION === 4 && Kernel::MINOR_VERSION >= 2 )
193+ {
194+ $ treeBuilder = new TreeBuilder ('connections ' );
195+ $ node = $ treeBuilder ->getRootNode ();
196+ }
197+ else
198+ {
199+ $ treeBuilder = new TreeBuilder ();
200+ $ node = $ treeBuilder ->root ('connections ' );
201+ };
180202
181203 $ node
182204 ->requiresAtLeastOneElement ()
183205 ->useAttributeAsKey ('name ' )
184- ->prototype ( ' array ' )
206+ ->arrayPrototype ( )
185207 ->children ()
186208 ->scalarNode ('driver ' )
187209 ->beforeNormalization ()
188210 ->always ()
189- ->then (function ( $ v ) { return str_replace ( ' pdo_ ' , '' , $ v ); } )
211+ ->then ($ closure )
190212 ->end ()
191213 ->defaultValue ('mysql ' )
192214 ->end ()
@@ -195,19 +217,19 @@ private function getDbalConnectionsNode()
195217 ->scalarNode ('dsn ' )
196218 ->beforeNormalization ()
197219 ->always ()
198- ->then (function ( $ v ) { return str_replace ( ' pdo_ ' , '' , $ v ); } )
220+ ->then ($ closure )
199221 ->end ()
200222 ->defaultValue ('' )
201223 ->end ()
202224 ->scalarNode ('classname ' )->defaultValue ($ this ->debug ? 'DebugPDO ' : 'PropelPDO ' )->end ()
203225 ->arrayNode ('slaves ' )
204226 ->useAttributeAsKey ('name ' )
205- ->prototype ( ' array ' )
227+ ->arrayPrototype ( )
206228 ->children ()
207229 ->scalarNode ('driver ' )
208230 ->beforeNormalization ()
209231 ->always ()
210- ->then (function ( $ v ) { return str_replace ( ' pdo_ ' , '' , $ v ); } )
232+ ->then ($ closure )
211233 ->end ()
212234 ->defaultValue ('mysql ' )
213235 ->end ()
@@ -216,7 +238,7 @@ private function getDbalConnectionsNode()
216238 ->scalarNode ('dsn ' )
217239 ->beforeNormalization ()
218240 ->always ()
219- ->then (function ( $ v ) { return str_replace ( ' pdo_ ' , '' , $ v ); } )
241+ ->then ($ closure )
220242 ->end ()
221243 ->defaultValue ('' )
222244 ->end ()
0 commit comments