Chris@14: Chris@14: * Chris@14: * For the full copyright and license information, please view the LICENSE Chris@14: * file that was distributed with this source code. Chris@14: */ Chris@14: Chris@14: namespace Symfony\Component\DependencyInjection\Loader\Configurator; Chris@14: Chris@14: use Symfony\Component\DependencyInjection\Argument\IteratorArgument; Chris@14: use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; Chris@14: use Symfony\Component\DependencyInjection\ContainerBuilder; Chris@14: use Symfony\Component\DependencyInjection\Definition; Chris@14: use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; Chris@14: use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; Chris@14: use Symfony\Component\ExpressionLanguage\Expression; Chris@14: Chris@14: /** Chris@14: * @author Nicolas Grekas Chris@14: */ Chris@14: class ContainerConfigurator extends AbstractConfigurator Chris@14: { Chris@14: const FACTORY = 'container'; Chris@14: Chris@14: private $container; Chris@14: private $loader; Chris@14: private $instanceof; Chris@14: private $path; Chris@14: private $file; Chris@14: Chris@14: public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, $path, $file) Chris@14: { Chris@14: $this->container = $container; Chris@14: $this->loader = $loader; Chris@14: $this->instanceof = &$instanceof; Chris@14: $this->path = $path; Chris@14: $this->file = $file; Chris@14: } Chris@14: Chris@14: final public function extension($namespace, array $config) Chris@14: { Chris@14: if (!$this->container->hasExtension($namespace)) { Chris@14: $extensions = array_filter(array_map(function ($ext) { return $ext->getAlias(); }, $this->container->getExtensions())); Chris@14: throw new InvalidArgumentException(sprintf( Chris@14: 'There is no extension able to load the configuration for "%s" (in %s). Looked for namespace "%s", found %s', Chris@14: $namespace, Chris@14: $this->file, Chris@14: $namespace, Chris@14: $extensions ? sprintf('"%s"', implode('", "', $extensions)) : 'none' Chris@14: )); Chris@14: } Chris@14: Chris@14: $this->container->loadFromExtension($namespace, static::processValue($config)); Chris@14: } Chris@14: Chris@14: final public function import($resource, $type = null, $ignoreErrors = false) Chris@14: { Chris@17: $this->loader->setCurrentDir(\dirname($this->path)); Chris@14: $this->loader->import($resource, $type, $ignoreErrors, $this->file); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return ParametersConfigurator Chris@14: */ Chris@14: final public function parameters() Chris@14: { Chris@14: return new ParametersConfigurator($this->container); Chris@14: } Chris@14: Chris@14: /** Chris@14: * @return ServicesConfigurator Chris@14: */ Chris@14: final public function services() Chris@14: { Chris@14: return new ServicesConfigurator($this->container, $this->loader, $this->instanceof); Chris@14: } Chris@14: } Chris@14: Chris@14: /** Chris@14: * Creates a service reference. Chris@14: * Chris@14: * @param string $id Chris@14: * Chris@14: * @return ReferenceConfigurator Chris@14: */ Chris@14: function ref($id) Chris@14: { Chris@14: return new ReferenceConfigurator($id); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Creates an inline service. Chris@14: * Chris@14: * @param string|null $class Chris@14: * Chris@14: * @return InlineServiceConfigurator Chris@14: */ Chris@14: function inline($class = null) Chris@14: { Chris@14: return new InlineServiceConfigurator(new Definition($class)); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Creates a lazy iterator. Chris@14: * Chris@14: * @param ReferenceConfigurator[] $values Chris@14: * Chris@14: * @return IteratorArgument Chris@14: */ Chris@14: function iterator(array $values) Chris@14: { Chris@14: return new IteratorArgument(AbstractConfigurator::processValue($values, true)); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Creates a lazy iterator by tag name. Chris@14: * Chris@14: * @param string $tag Chris@14: * Chris@14: * @return TaggedIteratorArgument Chris@14: */ Chris@14: function tagged($tag) Chris@14: { Chris@14: return new TaggedIteratorArgument($tag); Chris@14: } Chris@14: Chris@14: /** Chris@14: * Creates an expression. Chris@14: * Chris@14: * @param string $expression an expression Chris@14: * Chris@14: * @return Expression Chris@14: */ Chris@14: function expr($expression) Chris@14: { Chris@14: return new Expression($expression); Chris@14: }