|
1 <?php |
|
2 |
|
3 /* |
|
4 * This file is part of the Symfony package. |
|
5 * |
|
6 * (c) Fabien Potencier <fabien@symfony.com> |
|
7 * |
|
8 * For the full copyright and license information, please view the LICENSE |
|
9 * file that was distributed with this source code. |
|
10 */ |
|
11 |
|
12 namespace Symfony\Bundle\MonologBundle\DependencyInjection; |
|
13 |
|
14 use Symfony\Component\Config\Definition\Builder\TreeBuilder; |
|
15 use Symfony\Component\Config\Definition\ConfigurationInterface; |
|
16 |
|
17 /** |
|
18 * This class contains the configuration information for the bundle |
|
19 * |
|
20 * This information is solely responsible for how the different configuration |
|
21 * sections are normalized, and merged. |
|
22 * |
|
23 * @author Jordi Boggiano <j.boggiano@seld.be> |
|
24 * @author Christophe Coevoet <stof@notk.org> |
|
25 */ |
|
26 class Configuration implements ConfigurationInterface |
|
27 { |
|
28 /** |
|
29 * Generates the configuration tree builder. |
|
30 * |
|
31 * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder |
|
32 */ |
|
33 public function getConfigTreeBuilder() |
|
34 { |
|
35 $treeBuilder = new TreeBuilder(); |
|
36 $rootNode = $treeBuilder->root('monolog'); |
|
37 |
|
38 $rootNode |
|
39 ->fixXmlConfig('handler') |
|
40 ->children() |
|
41 ->arrayNode('handlers') |
|
42 ->canBeUnset() |
|
43 ->useAttributeAsKey('name') |
|
44 ->prototype('array') |
|
45 ->fixXmlConfig('member') |
|
46 ->canBeUnset() |
|
47 ->children() |
|
48 ->scalarNode('type') |
|
49 ->isRequired() |
|
50 ->treatNullLike('null') |
|
51 ->beforeNormalization() |
|
52 ->always() |
|
53 ->then(function($v) { return strtolower($v); }) |
|
54 ->end() |
|
55 ->end() |
|
56 ->scalarNode('id')->end() |
|
57 ->scalarNode('priority')->defaultValue(0)->end() |
|
58 ->scalarNode('level')->defaultValue('DEBUG')->end() |
|
59 ->booleanNode('bubble')->defaultTrue()->end() |
|
60 ->scalarNode('path')->defaultValue('%kernel.logs_dir%/%kernel.environment%.log')->end() // stream and rotating |
|
61 ->scalarNode('ident')->defaultFalse()->end() // syslog |
|
62 ->scalarNode('facility')->defaultValue('user')->end() // syslog |
|
63 ->scalarNode('max_files')->defaultValue(0)->end() // rotating |
|
64 ->scalarNode('action_level')->defaultValue('WARNING')->end() // fingers_crossed |
|
65 ->booleanNode('stop_buffering')->defaultTrue()->end()// fingers_crossed |
|
66 ->scalarNode('buffer_size')->defaultValue(0)->end() // fingers_crossed and buffer |
|
67 ->scalarNode('handler')->end() // fingers_crossed and buffer |
|
68 ->arrayNode('members') // group |
|
69 ->canBeUnset() |
|
70 ->performNoDeepMerging() |
|
71 ->prototype('scalar')->end() |
|
72 ->end() |
|
73 ->scalarNode('from_email')->end() // swift_mailer and native_mailer |
|
74 ->scalarNode('to_email')->end() // swift_mailer and native_mailer |
|
75 ->scalarNode('subject')->end() // swift_mailer and native_mailer |
|
76 ->arrayNode('email_prototype') // swift_mailer |
|
77 ->canBeUnset() |
|
78 ->beforeNormalization() |
|
79 ->ifString() |
|
80 ->then(function($v) { return array('id' => $v); }) |
|
81 ->end() |
|
82 ->children() |
|
83 ->scalarNode('id')->isRequired()->end() |
|
84 ->scalarNode('factory-method')->defaultNull()->end() |
|
85 ->end() |
|
86 ->end() |
|
87 ->scalarNode('formatter')->end() |
|
88 ->end() |
|
89 ->validate() |
|
90 ->ifTrue(function($v) { return ('fingers_crossed' === $v['type'] || 'buffer' === $v['type']) && 1 !== count($v['handler']); }) |
|
91 ->thenInvalid('The handler has to be specified to use a FingersCrossedHandler or BufferHandler') |
|
92 ->end() |
|
93 ->validate() |
|
94 ->ifTrue(function($v) { return 'swift_mailer' === $v['type'] && empty($v['email_prototype']) && (empty($v['from_email']) || empty($v['to_email']) || empty($v['subject'])); }) |
|
95 ->thenInvalid('The sender, recipient and subject or an email prototype have to be specified to use a SwiftMailerHandler') |
|
96 ->end() |
|
97 ->validate() |
|
98 ->ifTrue(function($v) { return 'native_mailer' === $v['type'] && (empty($v['from_email']) || empty($v['to_email']) || empty($v['subject'])); }) |
|
99 ->thenInvalid('The sender, recipient and subject have to be specified to use a NativeMailerHandler') |
|
100 ->end() |
|
101 ->validate() |
|
102 ->ifTrue(function($v) { return 'service' === $v['type'] && !isset($v['id']); }) |
|
103 ->thenInvalid('The id has to be specified to use a service as handler') |
|
104 ->end() |
|
105 ->end() |
|
106 ->validate() |
|
107 ->ifTrue(function($v) { return isset($v['debug']); }) |
|
108 ->thenInvalid('The "debug" name cannot be used as it is reserved for the handler of the profiler') |
|
109 ->end() |
|
110 ->end() |
|
111 ->end() |
|
112 ; |
|
113 |
|
114 return $treeBuilder; |
|
115 } |
|
116 } |