* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\DependencyInjection\Extension; use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\Exception\BadMethodCallException; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\Config\Definition\Processor; use Symfony\Component\Config\Definition\ConfigurationInterface; /** * Provides useful features shared by many extensions. * * @author Fabien Potencier */ abstract class Extension implements ExtensionInterface, ConfigurationExtensionInterface { private $processedConfigs = array(); /** * {@inheritdoc} */ public function getXsdValidationBasePath() { return false; } /** * {@inheritdoc} */ public function getNamespace() { return 'http://example.org/schema/dic/'.$this->getAlias(); } /** * Returns the recommended alias to use in XML. * * This alias is also the mandatory prefix to use when using YAML. * * This convention is to remove the "Extension" postfix from the class * name and then lowercase and underscore the result. So: * * AcmeHelloExtension * * becomes * * acme_hello * * This can be overridden in a sub-class to specify the alias manually. * * @return string The alias * * @throws BadMethodCallException When the extension name does not follow conventions */ public function getAlias() { $className = get_class($this); 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); return Container::underscore($classBaseName); } /** * {@inheritdoc} */ public function getConfiguration(array $config, ContainerBuilder $container) { $class = get_class($this); $class = substr_replace($class, '\Configuration', strrpos($class, '\\')); $class = $container->getReflectionClass($class); $constructor = $class ? $class->getConstructor() : null; if ($class && (!$constructor || !$constructor->getNumberOfRequiredParameters())) { return $class->newInstance(); } } final protected function processConfiguration(ConfigurationInterface $configuration, array $configs) { $processor = new Processor(); return $this->processedConfigs[] = $processor->processConfiguration($configuration, $configs); } /** * @internal */ final public function getProcessedConfigs() { try { return $this->processedConfigs; } finally { $this->processedConfigs = array(); } } /** * @return bool Whether the configuration is enabled * * @throws InvalidArgumentException When the config is not enableable */ protected function isConfigEnabled(ContainerBuilder $container, array $config) { if (!array_key_exists('enabled', $config)) { throw new InvalidArgumentException("The config array has no 'enabled' key."); } return (bool) $container->getParameterBag()->resolveValue($config['enabled']); } } __halt_compiler();----SIGNATURE:----qtt9AICdklgwMutfDbZfnFG3lM/I0pq+Kg7yZDV51t/SOBM73C8IOpRYm4s2woLQQJvBD+bPhBiRzgmhhXlSgbfMbrX5I6XyMlSf/RG9Ea6z9xOY/VXBmhgWu4YZ/gg/Fk9EJ0U7HaSQXhfArwNpCi8u/o/1oTBbZ/DJjp+nlFq/uGF+M+UvGC1WNDA9MmwjIHq9ku5nLlapr1nw5rjpazotD2kvlt6ec+Rb/b0p0aU2DLopT2tcmm1vACJvegOeNSqsbQw/kNgInGo4ZpxiaGGWiScgedhcxZsZ7wXqoFNsrAVtQfF2HAYOCwccNII0LM2KPDjQknKEmcDsyJyvDwV4qfHa7mpnS/2et6hCxB92uB+InLaeG+LRgoYrtCk14ZWWyGB92mgM/uwwspketkbmzMa4pBCiJ8EBBcgXqnM/msEpwsEea3m7kuxbE9iPeRcrt0i4ghm4wEFf+raWILki27ixuRXOXGaGaRBN/SpVsffD2c7tXCMz5/tNyN9RM+XgL/+R97xSYd0PcnZvRwurCASukN6O6bFNB9VH1s6a/pcyx6TfaF5Wq1dCUdbWQj5rZpJ8TAT9GIviimvWpu5kpVbYGyfwTKiiMZq0fOEPEgDnv5rw4rct+m+bosV9e14vs7fqtzLJFfMZqUdPSo5nFg/n7L7J/bmK9nS/cjE=----ATTACHMENT:----ODY4NDc4MTU5NTcxNDkxNiA4MDM5MjM2NDA2NjA1OTQ1IDg3NTI5MjYxMzMyNjY3MzM=