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

[DependencyInjection] added a way to configure extensions in plain PHP, added a fluent interface to BuilderConfiguration

Fabien Potencier пре 15 година
родитељ
комит
9e5718cff1
1 измењених фајлова са 61 додато и 0 уклоњено
  1. 61 0
      src/Symfony/Components/DependencyInjection/BuilderConfiguration.php

+ 61 - 0
src/Symfony/Components/DependencyInjection/BuilderConfiguration.php

@@ -2,6 +2,8 @@
 
 namespace Symfony\Components\DependencyInjection;
 
+use Symfony\Components\DependencyInjection\Loader\Loader;
+
 /*
  * This file is part of the symfony framework.
  *
@@ -45,16 +47,22 @@ class BuilderConfiguration
    * Adds a resource for this configuration.
    *
    * @param ResourceInterface $resource A resource instance
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function addResource(ResourceInterface $resource)
   {
     $this->resources[] = $resource;
+
+    return $this;
   }
 
   /**
    * Merges a BuilderConfiguration with the current one.
    *
    * @param BuilderConfiguration $configuration
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function merge(BuilderConfiguration $configuration = null)
   {
@@ -71,12 +79,35 @@ class BuilderConfiguration
     {
       $this->addResource($resource);
     }
+
+    return $this;
+  }
+
+  /**
+   * Merges the configuration given by an extension.
+   *
+   * @param $key    string The extension tag to load (namespace.tag)
+   * @param $values array  An array of values to customize the extension
+   *
+   * @return BuilderConfiguration The current instance
+   */
+  public function mergeExtension($key, array $values = array())
+  {
+    list($namespace, $tag) = explode('.', $key);
+
+    $config = Loader::getExtension($namespace)->load($tag, $values);
+
+    $this->merge($config);
+
+    return $this;
   }
 
   /**
    * Sets the service container parameters.
    *
    * @param array $parameters An array of parameters
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function setParameters(array $parameters)
   {
@@ -85,16 +116,22 @@ class BuilderConfiguration
     {
       $this->parameters[strtolower($key)] = $value;
     }
+
+    return $this;
   }
 
   /**
    * Adds parameters to the service container parameters.
    *
    * @param array $parameters An array of parameters
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function addParameters(array $parameters)
   {
     $this->setParameters(array_merge($this->parameters, $parameters));
+
+    return $this;
   }
 
   /**
@@ -143,10 +180,14 @@ class BuilderConfiguration
    *
    * @param string $name       The parameter name
    * @param mixed  $parameters The parameter value
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function setParameter($name, $value)
   {
     $this->parameters[strtolower($name)] = $value;
+
+    return $this;
   }
 
   /**
@@ -154,18 +195,24 @@ class BuilderConfiguration
    *
    * @param string $alias The alias to create
    * @param string $id    The service to alias
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function setAlias($alias, $id)
   {
     unset($this->definitions[$alias]);
 
     $this->aliases[$alias] = $id;
+
+    return $this;
   }
 
   /**
    * Adds definition aliases.
    *
    * @param array $aliases An array of aliases
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function addAliases(array $aliases)
   {
@@ -173,6 +220,8 @@ class BuilderConfiguration
     {
       $this->setAlias($alias, $id);
     }
+
+    return $this;
   }
 
   /**
@@ -221,18 +270,24 @@ class BuilderConfiguration
    *
    * @param  string     $id         The identifier
    * @param  Definition $definition A Definition instance
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function setDefinition($id, Definition $definition)
   {
     unset($this->aliases[$id]);
 
     return $this->definitions[$id] = $definition;
+
+    return $this;
   }
 
   /**
    * Adds the definitions.
    *
    * @param array $definitions An array of definitions
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function addDefinitions(array $definitions)
   {
@@ -240,17 +295,23 @@ class BuilderConfiguration
     {
       $this->setDefinition($id, $definition);
     }
+
+    return $this;
   }
 
   /**
    * Sets the definitions.
    *
    * @param array $definitions An array of definitions
+   *
+   * @return BuilderConfiguration The current instance
    */
   public function setDefinitions(array $definitions)
   {
     $this->definitions = array();
     $this->addDefinitions($definitions);
+
+    return $this;
   }
 
   /**