PageRenderTime 26ms CodeModel.GetById 28ms RepoModel.GetById 1ms app.codeStats 0ms

/vendor/sonata-project/block-bundle/DependencyInjection/Configuration.php

https://gitlab.com/freebird/WebApp
PHP | 226 lines | 176 code | 20 blank | 30 comment | 7 complexity | 860c618d35c772fc01ac669a9da416c3 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the Sonata package.
  4. *
  5. * (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Sonata\BlockBundle\DependencyInjection;
  11. use Symfony\Component\Config\Definition\Builder\TreeBuilder;
  12. use Symfony\Component\Config\Definition\ConfigurationInterface;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. /**
  15. * This is the class that validates and merges configuration from your app/config files.
  16. *
  17. * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class}
  18. */
  19. class Configuration implements ConfigurationInterface
  20. {
  21. /**
  22. * @var array
  23. */
  24. protected $defaultContainerTemplates;
  25. /**
  26. * @param array $defaultContainerTemplates
  27. */
  28. public function __construct(array $defaultContainerTemplates)
  29. {
  30. $this->defaultContainerTemplates = $defaultContainerTemplates;
  31. }
  32. /**
  33. * {@inheritdoc}
  34. */
  35. public function getConfigTreeBuilder()
  36. {
  37. $treeBuilder = new TreeBuilder();
  38. $node = $treeBuilder->root('sonata_block');
  39. $node
  40. ->fixXmlConfig('default_context')
  41. ->fixXmlConfig('template')
  42. ->fixXmlConfig('block')
  43. ->fixXmlConfig('block_by_class')
  44. ->validate()
  45. ->always(function ($value) {
  46. foreach ($value['blocks'] as $name => &$block) {
  47. if (count($block['contexts']) == 0) {
  48. $block['contexts'] = $value['default_contexts'];
  49. }
  50. }
  51. if (isset($value['profiler']['container_types']) && !empty($value['profiler']['container_types'])
  52. && isset($value['container']['types']) && !empty($value['container']['types'])
  53. && 0 !== count(array_diff($value['profiler']['container_types'], $value['container']['types']))) {
  54. throw new \RuntimeException('You cannot have different config options for sonata_block.profiler.container_types and sonata_block.container.types; the first one is deprecated, in case of doubt use the latter');
  55. }
  56. return $value;
  57. })
  58. ->end()
  59. ->children()
  60. ->arrayNode('profiler')
  61. ->addDefaultsIfNotSet()
  62. ->fixXmlConfig('container_type', 'container_types')
  63. ->children()
  64. ->scalarNode('enabled')->defaultValue('%kernel.debug%')->end()
  65. ->scalarNode('template')->defaultValue('SonataBlockBundle:Profiler:block.html.twig')->end()
  66. ->arrayNode('container_types')
  67. ->isRequired()
  68. // add default value to well know users of BlockBundle
  69. ->defaultValue(array('sonata.block.service.container', 'sonata.page.block.container', 'cmf.block.container', 'cmf.block.slideshow'))
  70. ->prototype('scalar')->end()
  71. ->end()
  72. ->end()
  73. ->end()
  74. ->arrayNode('default_contexts')
  75. ->isRequired()
  76. ->prototype('scalar')->end()
  77. ->end()
  78. ->scalarNode('context_manager')->defaultValue('sonata.block.context_manager.default')->end()
  79. ->arrayNode('http_cache')
  80. ->addDefaultsIfNotSet()
  81. ->children()
  82. ->scalarNode('handler')->defaultValue('sonata.block.cache.handler.default')->end()
  83. ->booleanNode('listener')->defaultValue(true)->end()
  84. ->end()
  85. ->end()
  86. ->arrayNode('templates')
  87. ->addDefaultsIfNotSet()
  88. ->children()
  89. ->scalarNode('block_base')->defaultValue(null)->end()
  90. ->scalarNode('block_container')->defaultValue(null)->end()
  91. ->end()
  92. ->end()
  93. ->arrayNode('container')
  94. ->info('block container configuration')
  95. ->addDefaultsIfNotSet()
  96. ->fixXmlConfig('type', 'types')
  97. ->fixXmlConfig('template', 'templates')
  98. ->children()
  99. ->arrayNode('types')
  100. ->info('container service ids')
  101. ->isRequired()
  102. // add default value to well know users of BlockBundle
  103. ->defaultValue(array('sonata.block.service.container', 'sonata.page.block.container', 'cmf.block.container', 'cmf.block.slideshow'))
  104. ->prototype('scalar')->end()
  105. ->end()
  106. ->arrayNode('templates')
  107. ->info('container templates')
  108. ->isRequired()
  109. ->defaultValue($this->defaultContainerTemplates)
  110. ->prototype('scalar')->end()
  111. ->end()
  112. ->end()
  113. ->end()
  114. ->arrayNode('blocks')
  115. ->info('configuration per block service')
  116. ->useAttributeAsKey('id')
  117. ->prototype('array')
  118. ->fixXmlConfig('context')
  119. ->fixXmlConfig('setting')
  120. ->children()
  121. ->arrayNode('contexts')
  122. ->prototype('scalar')->end()
  123. ->end()
  124. ->scalarNode('cache')->defaultValue('sonata.cache.noop')->end()
  125. ->arrayNode('settings')
  126. ->info('default settings')
  127. ->useAttributeAsKey('id')
  128. ->prototype('scalar')->end()
  129. ->end()
  130. ->arrayNode('exception')
  131. ->children()
  132. ->scalarNode('filter')->defaultValue(null)->end()
  133. ->scalarNode('renderer')->defaultValue(null)->end()
  134. ->end()
  135. ->end()
  136. ->end()
  137. ->end()
  138. ->end()
  139. ->arrayNode('menus')
  140. ->info('KNP Menus available in sonata.block.menu block configuration')
  141. ->useAttributeAsKey('id')
  142. ->prototype('scalar')->end()
  143. ->end()
  144. ->arrayNode('blocks_by_class')
  145. ->info('configuration per block class')
  146. ->useAttributeAsKey('class')
  147. ->prototype('array')
  148. ->fixXmlConfig('setting')
  149. ->children()
  150. ->scalarNode('cache')->defaultValue('sonata.cache.noop')->end()
  151. ->arrayNode('settings')
  152. ->info('default settings')
  153. ->useAttributeAsKey('id')
  154. ->prototype('scalar')->end()
  155. ->end()
  156. ->end()
  157. ->end()
  158. ->end()
  159. ->arrayNode('exception')
  160. ->addDefaultsIfNotSet()
  161. ->fixXmlConfig('filter')
  162. ->fixXmlConfig('renderer')
  163. ->children()
  164. ->arrayNode('default')
  165. ->addDefaultsIfNotSet()
  166. ->children()
  167. ->scalarNode('filter')->defaultValue('debug_only')->end()
  168. ->scalarNode('renderer')->defaultValue('throw')->end()
  169. ->end()
  170. ->end()
  171. ->arrayNode('filters')
  172. ->useAttributeAsKey('id')
  173. ->prototype('scalar')->end()
  174. ->defaultValue(array(
  175. 'debug_only' => 'sonata.block.exception.filter.debug_only',
  176. 'ignore_block_exception' => 'sonata.block.exception.filter.ignore_block_exception',
  177. 'keep_all' => 'sonata.block.exception.filter.keep_all',
  178. 'keep_none' => 'sonata.block.exception.filter.keep_none',
  179. ))
  180. ->end()
  181. ->arrayNode('renderers')
  182. ->useAttributeAsKey('id')
  183. ->prototype('scalar')->end()
  184. ->defaultValue(array(
  185. 'inline' => 'sonata.block.exception.renderer.inline',
  186. 'inline_debug' => 'sonata.block.exception.renderer.inline_debug',
  187. 'throw' => 'sonata.block.exception.renderer.throw',
  188. ))
  189. ->end()
  190. ->end()
  191. ->end()
  192. ->end()
  193. ;
  194. return $treeBuilder;
  195. }
  196. /**
  197. * @param array $config
  198. * @param ContainerBuilder $container
  199. *
  200. * @return Configuration
  201. */
  202. public function getConfiguration(array $config, ContainerBuilder $container)
  203. {
  204. return new self(array());
  205. }
  206. }