Преглед изворни кода

Merge remote branch 'stof/zend_config'

* stof/zend_config:
  Changed default priority to INFO
  [ZendBundle] Added a Configuration class
Fabien Potencier пре 14 година
родитељ
комит
5b92dcf9dd

+ 48 - 0
src/Symfony/Bundle/ZendBundle/DependencyInjection/Configuration.php

@@ -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();
+    }
+}

+ 14 - 38
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;
-            }
-
-            if ($first) {
-                $first = false;
+        $configuration = new Configuration();
+        $processor = new Processor();
+        $config = $processor->process($configuration->getConfigTree(), $configs);
 
-                $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
-                $loader->load('logger.xml');
-                $container->setAlias('logger', 'zend.logger');
-            }
-
-            $this->registerLoggerConfiguration($config, $container);
-        }
-    }
+        if (isset($config['logger'])) {
+            $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
+            $loader->load('logger.xml');
+            $container->setAlias('logger', 'zend.logger');
 
-    /**
-     * 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'];
+            $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');
+                }
             }
         }
     }

+ 0 - 1
src/Symfony/Bundle/ZendBundle/Resources/config/logger.xml

@@ -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>