diff --git a/src/Symfony/Bundle/ZendBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/ZendBundle/DependencyInjection/Configuration.php new file mode 100644 index 0000000000..63d647ba86 --- /dev/null +++ b/src/Symfony/Bundle/ZendBundle/DependencyInjection/Configuration.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\ZendBundle\DependencyInjection; + +use Symfony\Component\Config\Definition\Builder\NodeBuilder; +use Symfony\Component\Config\Definition\Builder\TreeBuilder; + +/** + * This class contains the configuration information for the bundle + * + * This information is solely responsible for how the different configuration + * sections are normalized, and merged. + * + * @author Christophe Coevoet + */ +class Configuration +{ + /** + * Generates the configuration tree. + * + * @return \Symfony\Component\Config\Definition\NodeInterface + */ + public function getConfigTree() + { + $treeBuilder = new TreeBuilder(); + $rootNode = $treeBuilder->root('zend', 'array'); + + $rootNode + ->arrayNode('logger') + ->canBeUnset() + ->scalarNode('priority')->defaultValue('CRIT')->end() + ->scalarNode('path')->defaultValue('%kernel.logs_dir%/%kernel.environment%.log')->end() + ->booleanNode('log_errors')->defaultFalse()->end() + ->end() + ; + + return $treeBuilder->buildTree(); + } +} diff --git a/src/Symfony/Bundle/ZendBundle/DependencyInjection/ZendExtension.php b/src/Symfony/Bundle/ZendBundle/DependencyInjection/ZendExtension.php index 8656484013..c21d3e2a0c 100644 --- a/src/Symfony/Bundle/ZendBundle/DependencyInjection/ZendExtension.php +++ b/src/Symfony/Bundle/ZendBundle/DependencyInjection/ZendExtension.php @@ -15,6 +15,7 @@ use Symfony\Component\HttpKernel\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Loader\XmlFileLoader; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\Config\FileLocator; +use Symfony\Component\Config\Definition\Processor; /** * ZendExtension is an extension for the Zend Framework libraries. @@ -37,52 +38,27 @@ class ZendExtension extends Extension */ public function load(array $configs, ContainerBuilder $container) { - $first = true; - foreach ($configs as $config) { - if (!isset($config['logger'])) { - continue; - } + $configuration = new Configuration(); + $processor = new Processor(); + $config = $processor->process($configuration->getConfigTree(), $configs); - if ($first) { - $first = false; + if (isset($config['logger'])) { + $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); + $loader->load('logger.xml'); + $container->setAlias('logger', 'zend.logger'); - $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('logger.xml'); - $container->setAlias('logger', 'zend.logger'); - } + $config = $config['logger']; - $this->registerLoggerConfiguration($config, $container); - } - } - - /** - * Loads the logger configuration. - * - * Usage example: - * - * - * - * @param array $config An array of configuration settings - * @param ContainerBuilder $container A ContainerBuilder instance - */ - protected function registerLoggerConfiguration($config, ContainerBuilder $container) - { - $config = $config['logger']; - - if (isset($config['priority'])) { $container->setParameter('zend.logger.priority', is_int($config['priority']) ? $config['priority'] : constant('\\Zend\\Log\\Logger::'.strtoupper($config['priority']))); - } - - if (isset($config['path'])) { $container->setParameter('zend.logger.path', $config['path']); - } - if (isset($config['log_errors'])) { $definition = $container->findDefinition('zend.logger'); - if (false === $config['log_errors'] && $definition->hasMethodCall('registerErrorHandler')) { - $container->findDefinition('zend.logger')->removeMethodCall('registerErrorHandler'); - } else { + if ($config['log_errors']) { $container->findDefinition('zend.logger')->addMethodCall('registerErrorHandler'); + } else { + if ($definition->hasMethodCall('registerErrorHandler')) { + $container->findDefinition('zend.logger')->removeMethodCall('registerErrorHandler'); + } } } }