2626 */
2727class Configuration implements ConfigurationInterface
2828{
29- private $ forceOptionValues = array (false , true , 'force ' );
29+ public static $ forceOptionValues = array (false , true , 'force ' );
3030
3131 /**
3232 * Generates the configuration tree.
@@ -42,18 +42,37 @@ public function getConfigTreeBuilder()
4242 ->children ()
4343 ->scalarNode ('disable_csrf_role ' )->defaultNull ()->end ()
4444 ->arrayNode ('access_denied_listener ' )
45- ->useAttributeAsKey ('name ' )
46- ->prototype ('boolean ' )->end ()
45+ ->canBeEnabled ()
46+ ->beforeNormalization ()
47+ ->ifArray ()->then (function ($ v ) { if (!empty ($ v ) && empty ($ v ['formats ' ])) { unset($ v ['enabled ' ]); $ v = array ('enabled ' => true , 'formats ' => $ v ); } return $ v ; })
48+ ->end ()
49+ ->fixXmlConfig ('format ' , 'formats ' )
50+ ->children ()
51+ ->scalarNode ('service ' )->defaultNull ()->end ()
52+ ->arrayNode ('formats ' )
53+ ->useAttributeAsKey ('name ' )
54+ ->prototype ('boolean ' )->end ()
55+ ->end ()
56+ ->end ()
4757 ->end ()
4858 ->scalarNode ('unauthorized_challenge ' )->defaultNull ()->end ()
49- ->scalarNode ('param_fetcher_listener ' )-> defaultFalse ( )
59+ ->arrayNode ('param_fetcher_listener ' )
5060 ->validate ()
51- ->ifNotInArray ($ this ->forceOptionValues )
52- ->thenInvalid ('The param_fetcher_listener option does not support %s. Please choose one of ' .json_encode ($ this ->forceOptionValues ))
61+ ->ifNotInArray (Configuration::$ forceOptionValues )
62+ ->thenInvalid ('The param_fetcher_listener option does not support %s. Please choose one of ' .json_encode (Configuration::$ forceOptionValues ))
63+ ->end ()
64+ ->canBeEnabled ()
65+ ->children ()
66+ ->scalarNode ('service ' )->defaultNull ()->end ()
5367 ->end ()
5468 ->end ()
5569 ->scalarNode ('cache_dir ' )->cannotBeEmpty ()->defaultValue ('%kernel.cache_dir%/fos_rest ' )->end ()
56- ->scalarNode ('allowed_methods_listener ' )->defaultFalse ()->end ()
70+ ->arrayNode ('allowed_methods_listener ' )
71+ ->canBeEnabled ()
72+ ->children ()
73+ ->scalarNode ('service ' )->defaultNull ()->end ()
74+ ->end ()
75+ ->end ()
5776 ->arrayNode ('routing_loader ' )
5877 ->addDefaultsIfNotSet ()
5978 ->children ()
@@ -124,8 +143,18 @@ private function addViewSection(ArrayNodeDefinition $rootNode)
124143 ->prototype ('boolean ' )->end ()
125144 ->end ()
126145 ->arrayNode ('mime_types ' )
127- ->useAttributeAsKey ('name ' )
128- ->prototype ('variable ' )->end ()
146+ ->canBeEnabled ()
147+ ->beforeNormalization ()
148+ ->ifArray ()->then (function ($ v ) { if (!empty ($ v ) && empty ($ v ['formats ' ])) { unset($ v ['enabled ' ]); $ v = array ('enabled ' => true , 'formats ' => $ v ); } return $ v ; })
149+ ->end ()
150+ ->fixXmlConfig ('format ' , 'formats ' )
151+ ->children ()
152+ ->scalarNode ('service ' )->defaultNull ()->end ()
153+ ->arrayNode ('formats ' )
154+ ->useAttributeAsKey ('name ' )
155+ ->prototype ('variable ' )->end ()
156+ ->end ()
157+ ->end ()
129158 ->end ()
130159 ->arrayNode ('formats ' )
131160 ->useAttributeAsKey ('name ' )
@@ -137,10 +166,18 @@ private function addViewSection(ArrayNodeDefinition $rootNode)
137166 ->defaultValue (array ('html ' => true ))
138167 ->prototype ('boolean ' )->end ()
139168 ->end ()
140- ->scalarNode ('view_response_listener ' )->defaultFalse ()
169+ ->arrayNode ('view_response_listener ' )
170+ ->beforeNormalization ()
171+ ->ifString ()->then (function ($ v ) { return array ('enabled ' => true , 'mode ' => $ v ); })
172+ ->end ()
141173 ->validate ()
142- ->ifNotInArray ($ this ->forceOptionValues )
143- ->thenInvalid ('The view_response_listener option does not support %s. Please choose one of ' .json_encode ($ this ->forceOptionValues ))
174+ ->ifTrue (function ($ v ) { return !in_array ($ v ['mode ' ], Configuration::$ forceOptionValues ); })
175+ ->thenInvalid ('The view_response_listener "mode" does not support %s. Please choose one of ' .json_encode (Configuration::$ forceOptionValues ))
176+ ->end ()
177+ ->canBeEnabled ()
178+ ->children ()
179+ ->scalarNode ('service ' )->defaultNull ()->end ()
180+ ->scalarNode ('mode ' )->defaultFalse ()->end ()
144181 ->end ()
145182 ->end ()
146183 ->scalarNode ('failed_validation ' )->defaultValue (Codes::HTTP_BAD_REQUEST )->end ()
@@ -168,7 +205,9 @@ private function addBodyListenerSection(ArrayNodeDefinition $rootNode)
168205 ->fixXmlConfig ('decoder ' , 'decoders ' )
169206 ->addDefaultsIfNotSet ()
170207 ->canBeUnset ()
208+ ->canBeDisabled ()
171209 ->children ()
210+ ->scalarNode ('service ' )->defaultNull ()->end ()
172211 ->scalarNode ('default_format ' )->defaultNull ()->end ()
173212 ->booleanNode ('throw_exception_on_unsupported_content_type ' )
174213 ->defaultFalse ()
@@ -213,7 +252,9 @@ private function addFormatListenerSection(ArrayNodeDefinition $rootNode)
213252 return $ v ;
214253 })
215254 ->end ()
255+ ->canBeEnabled ()
216256 ->children ()
257+ ->scalarNode ('service ' )->defaultNull ()->end ()
217258 ->arrayNode ('rules ' )
218259 ->cannotBeOverwritten ()
219260 ->prototype ('array ' )
@@ -235,8 +276,15 @@ private function addFormatListenerSection(ArrayNodeDefinition $rootNode)
235276 ->end ()
236277 ->arrayNode ('media_type ' )
237278 ->children ()
238- ->scalarNode ('version_regex ' )
239- ->defaultValue ('/(v|version)=(?P<version>[0-9\.]+)/ ' )
279+ ->arrayNode ('version_regex ' )
280+ ->canBeEnabled ()
281+ ->beforeNormalization ()
282+ ->ifString ()->then (function ($ v ) { return array ('enabled ' => true , 'regex ' => $ v ); })
283+ ->end ()
284+ ->children ()
285+ ->scalarNode ('service ' )->defaultNull ()->end ()
286+ ->scalarNode ('regex ' )->defaultValue ('/(v|version)=(?P<version>[0-9\.]+)/ ' )->end ()
287+ ->end ()
240288 ->end ()
241289 ->end ()
242290 ->end ()
0 commit comments