PageRenderTime 38ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://github.com/sellingsource/symfony
PHP | 362 lines | 318 code | 21 blank | 23 comment | 4 complexity | be4a92d9b3d7596042af1375564b7401 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Symfony framework.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * This source file is subject to the MIT license that is bundled
  8. * with this source code in the file LICENSE.
  9. */
  10. namespace Symfony\Bundle\FrameworkBundle\DependencyInjection;
  11. use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
  12. use Symfony\Component\Config\Definition\Builder\TreeBuilder;
  13. use Symfony\Component\Config\Definition\ConfigurationInterface;
  14. /**
  15. * FrameworkExtension configuration structure.
  16. *
  17. * @author Jeremy Mikola <jmikola@gmail.com>
  18. */
  19. class Configuration implements ConfigurationInterface
  20. {
  21. private $debug;
  22. /**
  23. * Constructor
  24. *
  25. * @param Boolean $debug Whether to use the debug mode
  26. */
  27. public function __construct($debug)
  28. {
  29. $this->debug = (Boolean) $debug;
  30. }
  31. /**
  32. * Generates the configuration tree builder.
  33. *
  34. * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder
  35. */
  36. public function getConfigTreeBuilder()
  37. {
  38. $treeBuilder = new TreeBuilder();
  39. $rootNode = $treeBuilder->root('framework');
  40. $rootNode
  41. ->children()
  42. ->scalarNode('charset')->end()
  43. ->scalarNode('trust_proxy_headers')->defaultFalse()->end()
  44. ->scalarNode('secret')->isRequired()->end()
  45. ->scalarNode('ide')->defaultNull()->end()
  46. ->booleanNode('test')->end()
  47. ->scalarNode('default_locale')->defaultValue('en')->end()
  48. ->end()
  49. ;
  50. $this->addFormSection($rootNode);
  51. $this->addEsiSection($rootNode);
  52. $this->addProfilerSection($rootNode);
  53. $this->addRouterSection($rootNode);
  54. $this->addSessionSection($rootNode);
  55. $this->addTemplatingSection($rootNode);
  56. $this->addTranslatorSection($rootNode);
  57. $this->addValidationSection($rootNode);
  58. $this->addAnnotationsSection($rootNode);
  59. return $treeBuilder;
  60. }
  61. private function addFormSection(ArrayNodeDefinition $rootNode)
  62. {
  63. $rootNode
  64. ->children()
  65. ->arrayNode('form')
  66. ->canBeUnset()
  67. ->treatNullLike(array('enabled' => true))
  68. ->treatTrueLike(array('enabled' => true))
  69. ->children()
  70. ->booleanNode('enabled')->defaultTrue()->end()
  71. ->end()
  72. ->end()
  73. ->arrayNode('csrf_protection')
  74. ->canBeUnset()
  75. ->treatNullLike(array('enabled' => true))
  76. ->treatTrueLike(array('enabled' => true))
  77. ->children()
  78. ->booleanNode('enabled')->defaultTrue()->end()
  79. ->scalarNode('field_name')->defaultValue('_token')->end()
  80. ->end()
  81. ->end()
  82. ->end()
  83. ;
  84. }
  85. private function addEsiSection(ArrayNodeDefinition $rootNode)
  86. {
  87. $rootNode
  88. ->children()
  89. ->arrayNode('esi')
  90. ->canBeUnset()
  91. ->treatNullLike(array('enabled' => true))
  92. ->treatTrueLike(array('enabled' => true))
  93. ->children()
  94. ->booleanNode('enabled')->defaultTrue()->end()
  95. ->end()
  96. ->end()
  97. ->end()
  98. ;
  99. }
  100. private function addProfilerSection(ArrayNodeDefinition $rootNode)
  101. {
  102. $rootNode
  103. ->children()
  104. ->arrayNode('profiler')
  105. ->canBeUnset()
  106. ->children()
  107. ->booleanNode('only_exceptions')->defaultFalse()->end()
  108. ->booleanNode('only_master_requests')->defaultFalse()->end()
  109. ->scalarNode('dsn')->defaultValue('file:%kernel.cache_dir%/profiler')->end()
  110. ->scalarNode('username')->defaultValue('')->end()
  111. ->scalarNode('password')->defaultValue('')->end()
  112. ->scalarNode('lifetime')->defaultValue(86400)->end()
  113. ->arrayNode('matcher')
  114. ->canBeUnset()
  115. ->performNoDeepMerging()
  116. ->children()
  117. ->scalarNode('ip')->end()
  118. ->scalarNode('path')->end()
  119. ->scalarNode('service')->end()
  120. ->end()
  121. ->end()
  122. ->end()
  123. ->end()
  124. ->end()
  125. ;
  126. }
  127. private function addRouterSection(ArrayNodeDefinition $rootNode)
  128. {
  129. $rootNode
  130. ->children()
  131. ->arrayNode('router')
  132. ->canBeUnset()
  133. ->children()
  134. ->scalarNode('resource')->isRequired()->end()
  135. ->scalarNode('type')->end()
  136. ->scalarNode('http_port')->defaultValue(80)->end()
  137. ->scalarNode('https_port')->defaultValue(443)->end()
  138. ->end()
  139. ->end()
  140. ->end()
  141. ;
  142. }
  143. private function addSessionSection(ArrayNodeDefinition $rootNode)
  144. {
  145. $rootNode
  146. ->children()
  147. ->arrayNode('session')
  148. ->canBeUnset()
  149. ->children()
  150. ->booleanNode('auto_start')->defaultFalse()->end()
  151. ->scalarNode('storage_id')->defaultValue('session.storage.native')->end()
  152. ->scalarNode('name')->end()
  153. ->scalarNode('lifetime')->end()
  154. ->scalarNode('path')->end()
  155. ->scalarNode('domain')->end()
  156. ->booleanNode('secure')->end()
  157. ->booleanNode('httponly')->end()
  158. ->end()
  159. ->end()
  160. ->end()
  161. ;
  162. }
  163. private function addTemplatingSection(ArrayNodeDefinition $rootNode)
  164. {
  165. $organizeUrls = function($urls)
  166. {
  167. $urls += array(
  168. 'http' => array(),
  169. 'ssl' => array(),
  170. );
  171. foreach ($urls as $i => $url) {
  172. if (is_integer($i)) {
  173. if (0 === strpos($url, 'https://') || 0 === strpos($url, '//')) {
  174. $urls['http'][] = $urls['ssl'][] = $url;
  175. } else {
  176. $urls['http'][] = $url;
  177. }
  178. unset($urls[$i]);
  179. }
  180. }
  181. return $urls;
  182. };
  183. $rootNode
  184. ->children()
  185. ->arrayNode('templating')
  186. ->canBeUnset()
  187. ->children()
  188. ->scalarNode('assets_version')->defaultValue(null)->end()
  189. ->scalarNode('assets_version_format')->defaultValue('%%s?%%s')->end()
  190. ->arrayNode('form')
  191. ->addDefaultsIfNotSet()
  192. ->fixXmlConfig('resource')
  193. ->children()
  194. ->arrayNode('resources')
  195. ->addDefaultsIfNotSet()
  196. ->defaultValue(array('FrameworkBundle:Form'))
  197. ->validate()
  198. ->ifTrue(function($v) {return !in_array('FrameworkBundle:Form', $v); })
  199. ->then(function($v){
  200. return array_merge(array('FrameworkBundle:Form'), $v);
  201. })
  202. ->end()
  203. ->prototype('scalar')->end()
  204. ->end()
  205. ->end()
  206. ->end()
  207. ->end()
  208. ->fixXmlConfig('assets_base_url')
  209. ->children()
  210. ->arrayNode('assets_base_urls')
  211. ->performNoDeepMerging()
  212. ->addDefaultsIfNotSet()
  213. ->defaultValue(array('http' => array(), 'ssl' => array()))
  214. ->beforeNormalization()
  215. ->ifTrue(function($v) { return !is_array($v); })
  216. ->then(function($v) { return array($v); })
  217. ->end()
  218. ->beforeNormalization()
  219. ->always()
  220. ->then($organizeUrls)
  221. ->end()
  222. ->children()
  223. ->arrayNode('http')
  224. ->prototype('scalar')->end()
  225. ->end()
  226. ->arrayNode('ssl')
  227. ->prototype('scalar')->end()
  228. ->end()
  229. ->end()
  230. ->end()
  231. ->scalarNode('cache')->end()
  232. ->end()
  233. ->fixXmlConfig('engine')
  234. ->children()
  235. ->arrayNode('engines')
  236. ->isRequired()
  237. ->requiresAtLeastOneElement()
  238. ->beforeNormalization()
  239. ->ifTrue(function($v){ return !is_array($v); })
  240. ->then(function($v){ return array($v); })
  241. ->end()
  242. ->prototype('scalar')->end()
  243. ->end()
  244. ->end()
  245. ->fixXmlConfig('loader')
  246. ->children()
  247. ->arrayNode('loaders')
  248. ->beforeNormalization()
  249. ->ifTrue(function($v){ return !is_array($v); })
  250. ->then(function($v){ return array($v); })
  251. ->end()
  252. ->prototype('scalar')->end()
  253. ->end()
  254. ->end()
  255. ->fixXmlConfig('package')
  256. ->children()
  257. ->arrayNode('packages')
  258. ->useAttributeAsKey('name')
  259. ->prototype('array')
  260. ->fixXmlConfig('base_url')
  261. ->children()
  262. ->scalarNode('version')->defaultNull()->end()
  263. ->scalarNode('version_format')->defaultValue('%%s?%%s')->end()
  264. ->arrayNode('base_urls')
  265. ->performNoDeepMerging()
  266. ->addDefaultsIfNotSet()
  267. ->defaultValue(array('http' => array(), 'ssl' => array()))
  268. ->beforeNormalization()
  269. ->ifTrue(function($v) { return !is_array($v); })
  270. ->then(function($v) { return array($v); })
  271. ->end()
  272. ->beforeNormalization()
  273. ->always()
  274. ->then($organizeUrls)
  275. ->end()
  276. ->children()
  277. ->arrayNode('http')
  278. ->prototype('scalar')->end()
  279. ->end()
  280. ->arrayNode('ssl')
  281. ->prototype('scalar')->end()
  282. ->end()
  283. ->end()
  284. ->end()
  285. ->end()
  286. ->end()
  287. ->end()
  288. ->end()
  289. ->end()
  290. ->end()
  291. ;
  292. }
  293. private function addTranslatorSection(ArrayNodeDefinition $rootNode)
  294. {
  295. $rootNode
  296. ->children()
  297. ->arrayNode('translator')
  298. ->canBeUnset()
  299. ->treatNullLike(array('enabled' => true))
  300. ->treatTrueLike(array('enabled' => true))
  301. ->children()
  302. ->booleanNode('enabled')->defaultTrue()->end()
  303. ->scalarNode('fallback')->defaultValue('en')->end()
  304. ->end()
  305. ->end()
  306. ->end()
  307. ;
  308. }
  309. private function addValidationSection(ArrayNodeDefinition $rootNode)
  310. {
  311. $rootNode
  312. ->children()
  313. ->arrayNode('validation')
  314. ->canBeUnset()
  315. ->treatNullLike(array('enabled' => true))
  316. ->treatTrueLike(array('enabled' => true))
  317. ->children()
  318. ->booleanNode('enabled')->defaultTrue()->end()
  319. ->scalarNode('cache')->end()
  320. ->booleanNode('enable_annotations')->defaultFalse()->end()
  321. ->end()
  322. ->end()
  323. ->end()
  324. ;
  325. }
  326. private function addAnnotationsSection(ArrayNodeDefinition $rootNode)
  327. {
  328. $rootNode
  329. ->children()
  330. ->arrayNode('annotations')
  331. ->addDefaultsIfNotSet()
  332. ->children()
  333. ->scalarNode('cache')->defaultValue('file')->end()
  334. ->scalarNode('file_cache_dir')->defaultValue('%kernel.cache_dir%/annotations')->end()
  335. ->booleanNode('debug')->defaultValue($this->debug)->end()
  336. ->end()
  337. ->end()
  338. ->end()
  339. ;
  340. }
  341. }