Resolves env parameter placeholders in a string or an array.
public resolveEnvPlaceholders ( mixed $value, string | true | null $format = null, array &$usedEnvs = null ) : string | ||
$value | mixed | The value to resolve |
$format | string | true | null | A sprintf() format returning the replacement for each env var name or null to resolve back to the original "%env(VAR)%" format or true to resolve to the actual values of the referenced env vars |
$usedEnvs | array | |
Résultat | string | The string with env parameters resolved |
public function testResolveEnvValues() { $_ENV['DUMMY_ENV_VAR'] = 'du%%y'; $container = new ContainerBuilder(); $container->setParameter('bar', '%% %env(DUMMY_ENV_VAR)%'); $this->assertSame('%% du%%%%y', $container->resolveEnvPlaceholders('%bar%', true)); unset($_ENV['DUMMY_ENV_VAR']); }
private function registerCacheConfiguration(array $config, ContainerBuilder $container) { $version = substr(str_replace('/', '-', base64_encode(hash('sha256', uniqid(mt_rand(), true), true))), 0, 22); $container->getDefinition('cache.annotations')->replaceArgument(2, $version); $container->getDefinition('cache.adapter.apcu')->replaceArgument(2, $version); $container->getDefinition('cache.adapter.system')->replaceArgument(2, $version); $container->getDefinition('cache.adapter.filesystem')->replaceArgument(2, $config['directory']); if (isset($config['prefix_seed'])) { $container->setParameter('cache.prefix.seed', $config['prefix_seed']); } if ($container->hasParameter('cache.prefix.seed')) { // Inline any env vars referenced in the parameter $container->setParameter('cache.prefix.seed', $container->resolveEnvPlaceholders($container->getParameter('cache.prefix.seed'), true)); } foreach (array('doctrine', 'psr6', 'redis') as $name) { if (isset($config[$name = 'default_' . $name . '_provider'])) { $container->setAlias('cache.' . $name, new Alias(Compiler\CachePoolPass::getServiceProvider($container, $config[$name]), false)); } } foreach (array('app', 'system') as $name) { $config['pools']['cache.' . $name] = array('adapter' => $config[$name], 'public' => true); } foreach ($config['pools'] as $name => $pool) { $definition = new ChildDefinition($pool['adapter']); $definition->setPublic($pool['public']); unset($pool['adapter'], $pool['public']); $definition->addTag('cache.pool', $pool); $container->setDefinition($name, $definition); } if (method_exists(PropertyAccessor::class, 'createCache')) { $propertyAccessDefinition = $container->register('cache.property_access', AdapterInterface::class); $propertyAccessDefinition->setPublic(false); $propertyAccessDefinition->setFactory(array(PropertyAccessor::class, 'createCache')); $propertyAccessDefinition->setArguments(array(null, null, $version, new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE))); $propertyAccessDefinition->addTag('cache.pool', array('clearer' => 'cache.default_clearer')); $propertyAccessDefinition->addTag('monolog.logger', array('channel' => 'cache')); } $this->addClassesToCompile(array('Symfony\\Component\\Cache\\Adapter\\ApcuAdapter', 'Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter', 'Symfony\\Component\\Cache\\CacheItem')); }
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); $config->resolveEnvPlaceholders($bag->get('env(Bar)')); $container->merge($config); $this->assertEquals(array('Foo' => 0, 'Bar' => 1), $container->getEnvCounters()); }
/** * @internal */ public static function getServiceProvider(ContainerBuilder $container, $name) { $container->resolveEnvPlaceholders($name, null, $usedEnvs); if (0 === strpos($name, 'redis://') || $usedEnvs) { $dsn = $name; if (!$container->hasDefinition($name = md5($dsn))) { $definition = new Definition(\Redis::class); $definition->setPublic(false); $definition->setFactory(array(RedisAdapter::class, 'createConnection')); $definition->setArguments(array($dsn)); $container->setDefinition($name, $definition); } } return $name; }