use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\Exception\BadMethodCallException;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
-use Symfony\Component\Config\Resource\FileResource;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\Definition\ConfigurationInterface;
*/
abstract class Extension implements ExtensionInterface, ConfigurationExtensionInterface
{
+ private $processedConfigs = array();
+
/**
* {@inheritdoc}
*/
public function getAlias()
{
$className = get_class($this);
- if (substr($className, -9) != 'Extension') {
+ if ('Extension' != substr($className, -9)) {
throw new BadMethodCallException('This extension does not follow the naming convention; you must overwrite the getAlias() method.');
}
$classBaseName = substr(strrchr($className, '\\'), 1, -9);
*/
public function getConfiguration(array $config, ContainerBuilder $container)
{
- $reflected = new \ReflectionClass($this);
- $namespace = $reflected->getNamespaceName();
-
- $class = $namespace.'\\Configuration';
- if (class_exists($class)) {
- $r = new \ReflectionClass($class);
- $container->addResource(new FileResource($r->getFileName()));
+ $class = get_class($this);
+ $class = substr_replace($class, '\Configuration', strrpos($class, '\\'));
+ $class = $container->getReflectionClass($class);
+ $constructor = $class ? $class->getConstructor() : null;
- if (!method_exists($class, '__construct')) {
- return new $class();
- }
+ if ($class && (!$constructor || !$constructor->getNumberOfRequiredParameters())) {
+ return $class->newInstance();
}
}
{
$processor = new Processor();
- return $processor->processConfiguration($configuration, $configs);
+ return $this->processedConfigs[] = $processor->processConfiguration($configuration, $configs);
+ }
+
+ /**
+ * @internal
+ */
+ final public function getProcessedConfigs()
+ {
+ try {
+ return $this->processedConfigs;
+ } finally {
+ $this->processedConfigs = array();
+ }
}
/**
- * @param ContainerBuilder $container
- * @param array $config
- *
* @return bool Whether the configuration is enabled
*
* @throws InvalidArgumentException When the config is not enableable