Merge remote branch 'stof/zend_config'

* stof/zend_config:
  Changed default priority to INFO
  [ZendBundle] Added a Configuration class
This commit is contained in:
Fabien Potencier 2011-02-24 17:55:15 +01:00
commit 5b92dcf9dd
3 changed files with 62 additions and 39 deletions

View File

@ -0,0 +1,48 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* 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 <stof@notk.org>
*/
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('INFO')->end()
->scalarNode('path')->defaultValue('%kernel.logs_dir%/%kernel.environment%.log')->end()
->booleanNode('log_errors')->defaultFalse()->end()
->end()
;
return $treeBuilder->buildTree();
}
}

View File

@ -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:
*
* <zend:logger priority="info" path="/path/to/some.log" />
*
* @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');
}
}
}
}

View File

@ -6,7 +6,6 @@
<parameters>
<parameter key="zend.logger.class">Symfony\Bundle\ZendBundle\Logger\Logger</parameter>
<parameter key="zend.logger.priority" type="constant">Zend\Log\Logger::CRIT</parameter>
<parameter key="zend.logger.log_errors">true</parameter>
<parameter key="zend.logger.writer.debug.class">Symfony\Bundle\ZendBundle\Logger\DebugLogger</parameter>
<parameter key="zend.logger.writer.filesystem.class">Zend\Log\Writer\Stream</parameter>