PageRenderTime 60ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

https://github.com/PUBLILINGUS/Publilingus
PHP | 305 lines | 275 code | 14 blank | 16 comment | 7 complexity | b69c68358d4f770267cd2f48b046d3c9 MD5 | raw file
  1. <?php
  2. namespace Symfony\Bundle\FrameworkBundle\DependencyInjection;
  3. use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
  4. use Symfony\Component\Config\Definition\Builder\TreeBuilder;
  5. /**
  6. * FrameworkExtension configuration structure.
  7. *
  8. * @author Jeremy Mikola <jmikola@gmail.com>
  9. */
  10. class Configuration
  11. {
  12. /**
  13. * Generates the configuration tree.
  14. *
  15. * @param boolean $kernelDebug The kernel.debug DIC parameter
  16. *
  17. * @return \Symfony\Component\Config\Definition\ArrayNode The config tree
  18. */
  19. public function getConfigTree($kernelDebug)
  20. {
  21. $treeBuilder = new TreeBuilder();
  22. $rootNode = $treeBuilder->root('framework');
  23. $rootNode
  24. ->children()
  25. ->scalarNode('cache_warmer')->defaultValue(!$kernelDebug)->end()
  26. ->scalarNode('charset')->end()
  27. ->scalarNode('document_root')->end()
  28. ->scalarNode('error_handler')->end()
  29. ->scalarNode('exception_controller')->defaultValue('Symfony\\Bundle\\FrameworkBundle\\Controller\\ExceptionController::showAction')->end()
  30. ->scalarNode('ide')->defaultNull()->end()
  31. ->booleanNode('test')->end()
  32. ->end()
  33. ;
  34. $this->addCsrfProtectionSection($rootNode);
  35. $this->addEsiSection($rootNode);
  36. $this->addProfilerSection($rootNode);
  37. $this->addRouterSection($rootNode);
  38. $this->addSessionSection($rootNode);
  39. $this->addTemplatingSection($rootNode);
  40. $this->addTranslatorSection($rootNode);
  41. $this->addValidationSection($rootNode);
  42. return $treeBuilder->buildTree();
  43. }
  44. private function addCsrfProtectionSection(ArrayNodeDefinition $rootNode)
  45. {
  46. $rootNode
  47. ->children()
  48. ->arrayNode('csrf_protection')
  49. ->canBeUnset()
  50. ->treatNullLike(array('enabled' => true))
  51. ->treatTrueLike(array('enabled' => true))
  52. ->children()
  53. ->booleanNode('enabled')->end()
  54. ->scalarNode('field_name')->end()
  55. ->scalarNode('secret')->end()
  56. ->end()
  57. ->end()
  58. ->end()
  59. ;
  60. }
  61. private function addEsiSection(ArrayNodeDefinition $rootNode)
  62. {
  63. $rootNode
  64. ->children()
  65. ->arrayNode('esi')
  66. ->canBeUnset()
  67. ->treatNullLike(array('enabled' => true))
  68. ->treatTrueLike(array('enabled' => true))
  69. ->children()
  70. ->booleanNode('enabled')->end()
  71. ->end()
  72. ->end()
  73. ->end()
  74. ;
  75. }
  76. private function addProfilerSection(ArrayNodeDefinition $rootNode)
  77. {
  78. $rootNode
  79. ->children()
  80. ->arrayNode('profiler')
  81. ->canBeUnset()
  82. ->children()
  83. ->booleanNode('only_exceptions')->defaultValue(false)->end()
  84. ->booleanNode('only_master_requests')->defaultValue(false)->end()
  85. ->scalarNode('dsn')->defaultValue('sqlite:%kernel.cache_dir%/profiler.db')->end()
  86. ->scalarNode('username')->defaultValue('')->end()
  87. ->scalarNode('password')->defaultValue('')->end()
  88. ->scalarNode('lifetime')->defaultValue(86400)->end()
  89. ->arrayNode('matcher')
  90. ->canBeUnset()
  91. ->performNoDeepMerging()
  92. ->children()
  93. ->scalarNode('ip')->end()
  94. ->scalarNode('path')->end()
  95. ->scalarNode('service')->end()
  96. ->end()
  97. ->end()
  98. ->end()
  99. ->end()
  100. ->end()
  101. ;
  102. }
  103. private function addRouterSection(ArrayNodeDefinition $rootNode)
  104. {
  105. $rootNode
  106. ->children()
  107. ->arrayNode('router')
  108. ->canBeUnset()
  109. ->children()
  110. ->scalarNode('cache_warmer')->defaultFalse()->end()
  111. ->scalarNode('resource')->isRequired()->end()
  112. ->scalarNode('type')->end()
  113. ->end()
  114. ->end()
  115. ->end()
  116. ;
  117. }
  118. private function addSessionSection(ArrayNodeDefinition $rootNode)
  119. {
  120. $rootNode
  121. ->children()
  122. ->arrayNode('session')
  123. ->canBeUnset()
  124. // Strip "pdo." prefix from option keys, since dots cannot appear in node names
  125. ->beforeNormalization()
  126. ->ifArray()
  127. ->then(function($v){
  128. foreach ($v as $key => $value) {
  129. if (0 === strncmp('pdo.', $key, 4)) {
  130. $v[substr($key, 4)] = $value;
  131. unset($v[$key]);
  132. }
  133. }
  134. return $v;
  135. })
  136. ->end()
  137. ->children()
  138. ->booleanNode('auto_start')->end()
  139. ->scalarNode('class')->end()
  140. ->scalarNode('default_locale')->defaultValue('en')->end()
  141. ->scalarNode('storage_id')->defaultValue('native')->end()
  142. // NativeSessionStorage options
  143. ->scalarNode('name')->end()
  144. ->scalarNode('lifetime')->end()
  145. ->scalarNode('path')->end()
  146. ->scalarNode('domain')->end()
  147. ->booleanNode('secure')->end()
  148. ->booleanNode('httponly')->end()
  149. // PdoSessionStorage options
  150. ->scalarNode('db_table')->end()
  151. ->scalarNode('db_id_col')->end()
  152. ->scalarNode('db_data_col')->end()
  153. ->scalarNode('db_time_col')->end()
  154. ->end()
  155. ->end()
  156. ->end()
  157. ;
  158. }
  159. private function addTemplatingSection(ArrayNodeDefinition $rootNode)
  160. {
  161. $rootNode
  162. ->children()
  163. ->arrayNode('templating')
  164. ->canBeUnset()
  165. ->children()
  166. ->scalarNode('assets_version')->defaultValue(null)->end()
  167. ->end()
  168. ->fixXmlConfig('assets_base_url')
  169. ->children()
  170. ->arrayNode('assets_base_urls')
  171. ->beforeNormalization()
  172. ->ifTrue(function($v){ return !is_array($v); })
  173. ->then(function($v){ return array($v); })
  174. ->end()
  175. ->prototype('scalar')
  176. ->beforeNormalization()
  177. ->ifTrue(function($v) { return is_array($v) && isset($v['value']); })
  178. ->then(function($v){ return $v['value']; })
  179. ->end()
  180. ->end()
  181. ->end()
  182. ->scalarNode('cache')->end()
  183. ->scalarNode('cache_warmer')->defaultFalse()->end()
  184. ->end()
  185. ->fixXmlConfig('engine')
  186. ->children()
  187. ->arrayNode('engines')
  188. ->isRequired()
  189. ->requiresAtLeastOneElement()
  190. ->beforeNormalization()
  191. ->ifTrue(function($v){ return !is_array($v); })
  192. ->then(function($v){ return array($v); })
  193. ->end()
  194. ->prototype('scalar')
  195. ->beforeNormalization()
  196. ->ifTrue(function($v) { return is_array($v) && isset($v['id']); })
  197. ->then(function($v){ return $v['id']; })
  198. ->end()
  199. ->end()
  200. ->end()
  201. ->end()
  202. ->fixXmlConfig('loader')
  203. ->children()
  204. ->arrayNode('loaders')
  205. ->beforeNormalization()
  206. ->ifTrue(function($v){ return !is_array($v); })
  207. ->then(function($v){ return array($v); })
  208. ->end()
  209. ->prototype('scalar')->end()
  210. ->end()
  211. ->end()
  212. ->fixXmlConfig('package')
  213. ->children()
  214. ->arrayNode('packages')
  215. ->useAttributeAsKey('name')
  216. ->prototype('array')
  217. ->children()
  218. ->scalarNode('version')->defaultNull()->end()
  219. ->end()
  220. ->fixXmlConfig('base_url')
  221. ->children()
  222. ->arrayNode('base_urls')
  223. ->prototype('scalar')
  224. ->beforeNormalization()
  225. ->ifTrue(function($v) { return is_array($v) && isset($v['value']); })
  226. ->then(function($v){ return $v['value']; })
  227. ->end()
  228. ->end()
  229. ->end()
  230. ->end()
  231. ->end()
  232. ->end()
  233. ->end()
  234. ->end()
  235. ->end()
  236. ;
  237. }
  238. private function addTranslatorSection(ArrayNodeDefinition $rootNode)
  239. {
  240. $rootNode
  241. ->children()
  242. ->arrayNode('translator')
  243. ->canBeUnset()
  244. ->children()
  245. ->booleanNode('enabled')->defaultTrue()->end()
  246. ->scalarNode('fallback')->defaultValue('en')->end()
  247. ->end()
  248. ->end()
  249. ->end()
  250. ;
  251. }
  252. private function addValidationSection(ArrayNodeDefinition $rootNode)
  253. {
  254. $rootNode
  255. ->children()
  256. ->arrayNode('validation')
  257. ->canBeUnset()
  258. // For XML, namespace is a child of validation, so it must be moved under annotations
  259. ->beforeNormalization()
  260. ->ifTrue(function($v) { return is_array($v) && !empty($v['annotations']) && !empty($v['namespace']); })
  261. ->then(function($v){
  262. $v['annotations'] = array('namespace' => $v['namespace']);
  263. unset($v['namespace']);
  264. return $v;
  265. })
  266. ->end()
  267. ->children()
  268. ->booleanNode('enabled')->end()
  269. ->arrayNode('annotations')
  270. ->canBeUnset()
  271. ->treatNullLike(array())
  272. ->treatTrueLike(array())
  273. ->fixXmlConfig('namespace')
  274. ->children()
  275. ->arrayNode('namespaces')
  276. ->useAttributeAsKey('prefix')
  277. ->prototype('scalar')
  278. ->beforeNormalization()
  279. ->ifTrue(function($v) { return is_array($v) && isset($v['namespace']); })
  280. ->then(function($v){ return $v['namespace']; })
  281. ->end()
  282. ->end()
  283. ->end()
  284. ->end()
  285. ->end()
  286. ->end()
  287. ->end()
  288. ->end()
  289. ;
  290. }
  291. }