Author: Nicolas Grekas (p@tchwork.com)
Inheritance: extends ParameterBag
 /**
  * Merges the env placeholders of another EnvPlaceholderParameterBag.
  */
 public function mergeEnvPlaceholders(self $bag)
 {
     if ($newPlaceholders = $bag->getEnvPlaceholders()) {
         $this->envPlaceholders += $newPlaceholders;
         foreach ($newPlaceholders as $env => $placeholders) {
             $this->envPlaceholders[$env] += $placeholders;
         }
     }
 }
 public function testMergeWithDifferentIdentifiersForPlaceholders()
 {
     $envName = 'DB_USER';
     $paramName = sprintf('env(%s)', $envName);
     $firstBag = new EnvPlaceholderParameterBag();
     $secondBag = new EnvPlaceholderParameterBag();
     // initialize placeholders
     $firstPlaceholder = $firstBag->get($paramName);
     $secondPlaceholder = $secondBag->get($paramName);
     $firstBag->mergeEnvPlaceholders($secondBag);
     $merged = $firstBag->getEnvPlaceholders();
     $this->assertNotEquals($firstPlaceholder, $secondPlaceholder);
     $this->assertCount(2, $merged[$envName]);
 }
Esempio n. 3
0
 private function initializeConfig()
 {
     if ($this->loaded) {
         return;
     }
     $this->loaded = true;
     if ([] === ($filenames = (array) $this['config.filenames'])) {
         return;
     }
     $parameterBag = new EnvPlaceholderParameterBag($this['config.replacements']);
     $locator = new FileLocator();
     $loaders = [new PhpFileLoader($this, $locator), new DirectoryLoader($locator)];
     if (class_exists('Symfony\\Component\\Yaml\\Yaml')) {
         $loaders[] = new YamlFileLoader($this, $parameterBag, $locator);
     }
     $loader = new DelegatingLoader(new LoaderResolver($loaders));
     foreach ($filenames as $path) {
         $loader->load($parameterBag->resolveValue($path));
     }
 }
Esempio n. 4
0
    public function testMerge()
    {
        $container = new ContainerBuilder(new ParameterBag(array('bar' => 'foo')));
        $container->setResourceTracking(false);
        $config = new ContainerBuilder(new ParameterBag(array('foo' => 'bar')));
        $container->merge($config);
        $this->assertEquals(array('bar' => 'foo', 'foo' => 'bar'), $container->getParameterBag()->all(), '->merge() merges current parameters with the loaded ones');

        $container = new ContainerBuilder(new ParameterBag(array('bar' => 'foo')));
        $container->setResourceTracking(false);
        $config = new ContainerBuilder(new ParameterBag(array('foo' => '%bar%')));
        $container->merge($config);
        $container->compile();
        $this->assertEquals(array('bar' => 'foo', 'foo' => 'foo'), $container->getParameterBag()->all(), '->merge() evaluates the values of the parameters towards already defined ones');

        $container = new ContainerBuilder(new ParameterBag(array('bar' => 'foo')));
        $container->setResourceTracking(false);
        $config = new ContainerBuilder(new ParameterBag(array('foo' => '%bar%', 'baz' => '%foo%')));
        $container->merge($config);
        $container->compile();
        $this->assertEquals(array('bar' => 'foo', 'foo' => 'foo', 'baz' => 'foo'), $container->getParameterBag()->all(), '->merge() evaluates the values of the parameters towards already defined ones');

        $container = new ContainerBuilder();
        $container->setResourceTracking(false);
        $container->register('foo', 'Bar\FooClass');
        $container->register('bar', 'BarClass');
        $config = new ContainerBuilder();
        $config->setDefinition('baz', new Definition('BazClass'));
        $config->setAlias('alias_for_foo', 'foo');
        $container->merge($config);
        $this->assertEquals(array('foo', 'bar', 'baz'), array_keys($container->getDefinitions()), '->merge() merges definitions already defined ones');

        $aliases = $container->getAliases();
        $this->assertTrue(isset($aliases['alias_for_foo']));
        $this->assertEquals('foo', (string) $aliases['alias_for_foo']);

        $container = new ContainerBuilder();
        $container->setResourceTracking(false);
        $container->register('foo', 'Bar\FooClass');
        $config->setDefinition('foo', new Definition('BazClass'));
        $container->merge($config);
        $this->assertEquals('BazClass', $container->getDefinition('foo')->getClass(), '->merge() overrides already defined services');

        $container = new ContainerBuilder();
        $bag = new EnvPlaceholderParameterBag();
        $bag->get('env(Foo)');
        $config = new ContainerBuilder($bag);
        $this->assertSame(array('%env(Bar)%'), $config->resolveEnvPlaceholders(array($bag->get('env(Bar)'))));
        $container->merge($config);
        $this->assertEquals(array('Foo' => 0, 'Bar' => 1), $container->getEnvCounters());
    }
 /**
  * @expectedException \Symfony\Component\DependencyInjection\Exception\RuntimeException
  * @expectedExceptionMessage The default value of an env() parameter must be scalar or null, but "array" given to "env(ARRAY_VAR)".
  */
 public function testGetThrowsOnBadDefaultValue()
 {
     $bag = new EnvPlaceholderParameterBag();
     $bag->set('env(ARRAY_VAR)', array());
     $bag->get('env(ARRAY_VAR)');
     $bag->resolve();
 }
 /**
  * @expectedException \Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
  */
 public function testGetThrowsInvalidArgumentExceptionIfEnvNameContainsNonWordCharacters()
 {
     $bag = new EnvPlaceholderParameterBag();
     $bag->get('env(%foo%)');
 }
 /**
  * Merges the env placeholders of another EnvPlaceholderParameterBag.
  */
 public function mergeEnvPlaceholders(self $bag)
 {
     $this->envPlaceholders = array_merge_recursive($this->envPlaceholders, $bag->getEnvPlaceholders());
 }
 /**
  * @param string $value
  * @param array  $replacements
  *
  * @return mixed
  */
 private function resolveString($value, array $replacements)
 {
     $parameterBag = new EnvPlaceholderParameterBag($replacements);
     return $parameterBag->resolveValue($value);
 }