3b4b2a4830f91562e5d1edee81452dad6b3ae4cd
[yaffs-website] / vendor / symfony / dependency-injection / Loader / Configurator / ContainerConfigurator.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\DependencyInjection\Loader\Configurator;
13
14 use Symfony\Component\DependencyInjection\Argument\IteratorArgument;
15 use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
16 use Symfony\Component\DependencyInjection\ContainerBuilder;
17 use Symfony\Component\DependencyInjection\Definition;
18 use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
19 use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
20 use Symfony\Component\ExpressionLanguage\Expression;
21
22 /**
23  * @author Nicolas Grekas <p@tchwork.com>
24  */
25 class ContainerConfigurator extends AbstractConfigurator
26 {
27     const FACTORY = 'container';
28
29     private $container;
30     private $loader;
31     private $instanceof;
32     private $path;
33     private $file;
34
35     public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, $path, $file)
36     {
37         $this->container = $container;
38         $this->loader = $loader;
39         $this->instanceof = &$instanceof;
40         $this->path = $path;
41         $this->file = $file;
42     }
43
44     final public function extension($namespace, array $config)
45     {
46         if (!$this->container->hasExtension($namespace)) {
47             $extensions = array_filter(array_map(function ($ext) { return $ext->getAlias(); }, $this->container->getExtensions()));
48             throw new InvalidArgumentException(sprintf(
49                 'There is no extension able to load the configuration for "%s" (in %s). Looked for namespace "%s", found %s',
50                 $namespace,
51                 $this->file,
52                 $namespace,
53                 $extensions ? sprintf('"%s"', implode('", "', $extensions)) : 'none'
54             ));
55         }
56
57         $this->container->loadFromExtension($namespace, static::processValue($config));
58     }
59
60     final public function import($resource, $type = null, $ignoreErrors = false)
61     {
62         $this->loader->setCurrentDir(\dirname($this->path));
63         $this->loader->import($resource, $type, $ignoreErrors, $this->file);
64     }
65
66     /**
67      * @return ParametersConfigurator
68      */
69     final public function parameters()
70     {
71         return new ParametersConfigurator($this->container);
72     }
73
74     /**
75      * @return ServicesConfigurator
76      */
77     final public function services()
78     {
79         return new ServicesConfigurator($this->container, $this->loader, $this->instanceof);
80     }
81 }
82
83 /**
84  * Creates a service reference.
85  *
86  * @param string $id
87  *
88  * @return ReferenceConfigurator
89  */
90 function ref($id)
91 {
92     return new ReferenceConfigurator($id);
93 }
94
95 /**
96  * Creates an inline service.
97  *
98  * @param string|null $class
99  *
100  * @return InlineServiceConfigurator
101  */
102 function inline($class = null)
103 {
104     return new InlineServiceConfigurator(new Definition($class));
105 }
106
107 /**
108  * Creates a lazy iterator.
109  *
110  * @param ReferenceConfigurator[] $values
111  *
112  * @return IteratorArgument
113  */
114 function iterator(array $values)
115 {
116     return new IteratorArgument(AbstractConfigurator::processValue($values, true));
117 }
118
119 /**
120  * Creates a lazy iterator by tag name.
121  *
122  * @param string $tag
123  *
124  * @return TaggedIteratorArgument
125  */
126 function tagged($tag)
127 {
128     return new TaggedIteratorArgument($tag);
129 }
130
131 /**
132  * Creates an expression.
133  *
134  * @param string $expression an expression
135  *
136  * @return Expression
137  */
138 function expr($expression)
139 {
140     return new Expression($expression);
141 }