Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e9c5625

Browse files
committed
[bundle] add support for %env(resolve:FOO)% feature.
1 parent bc61186 commit e9c5625

File tree

2 files changed

+54
-14
lines changed

2 files changed

+54
-14
lines changed

pkg/enqueue/Symfony/DefaultTransportFactory.php

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -141,27 +141,15 @@ public function getName()
141141
}
142142

143143
/**
144-
* This is a quick fix to the exception "Incompatible use of dynamic environment variables "ENQUEUE_DSN" found in parameters."
145-
* TODO: We'll have to come up with a better solution.
146-
*
147144
* @param ContainerBuilder $container
148-
* @param $dsn
145+
* @param string $dsn
149146
*
150147
* @return array|false|string
151148
*/
152149
private function resolveDSN(ContainerBuilder $container, $dsn)
153150
{
154151
if (method_exists($container, 'resolveEnvPlaceholders')) {
155-
$dsn = $container->resolveEnvPlaceholders($dsn);
156-
157-
$matches = [];
158-
if (preg_match('/%env\((.*?)\)/', $dsn, $matches)) {
159-
if (false === $realDsn = getenv($matches[1])) {
160-
throw new \LogicException(sprintf('The env "%s" var is not defined', $matches[1]));
161-
}
162-
163-
return $realDsn;
164-
}
152+
return $container->resolveEnvPlaceholders($dsn, true);
165153
}
166154

167155
return $dsn;

pkg/enqueue/Tests/Symfony/DefaultTransportFactoryTest.php

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,58 @@ public function testShouldCreateDriverFromDsn($dsn, $expectedName)
266266
$this->assertEquals($driverId, (string) $context);
267267
}
268268

269+
public function testShouldCreateConnectionFactoryFromEnvironmentDSN()
270+
{
271+
$env = str_replace(['\\', ':'], '', strtoupper(uniqid(__METHOD__)));
272+
putenv("$env=null:");
273+
274+
$container = new ContainerBuilder();
275+
276+
$transport = new DefaultTransportFactory();
277+
278+
$serviceId = $transport->createConnectionFactory($container, ['dsn' => "%env($env)%"]);
279+
280+
$this->assertEquals('enqueue.transport.default.connection_factory', $serviceId);
281+
282+
$this->assertTrue($container->hasAlias('enqueue.transport.default.connection_factory'));
283+
$this->assertEquals(
284+
sprintf('enqueue.transport.%s.connection_factory', 'default_null'),
285+
(string) $container->getAlias('enqueue.transport.default.connection_factory')
286+
);
287+
288+
$this->assertTrue($container->hasAlias('enqueue.transport.connection_factory'));
289+
$this->assertEquals(
290+
'enqueue.transport.default.connection_factory',
291+
(string) $container->getAlias('enqueue.transport.connection_factory')
292+
);
293+
}
294+
295+
public function testShouldCreateConnectionFactoryFromEnvironmentWithResolveProviderDSN()
296+
{
297+
$env = str_replace(['\\', ':'], '', strtoupper(uniqid(__METHOD__)));
298+
putenv("$env=file:");
299+
300+
$container = new ContainerBuilder();
301+
302+
$transport = new DefaultTransportFactory();
303+
304+
$serviceId = $transport->createConnectionFactory($container, ['dsn' => "%env(resolve:$env)%"]);
305+
306+
$this->assertEquals('enqueue.transport.default.connection_factory', $serviceId);
307+
308+
$this->assertTrue($container->hasAlias('enqueue.transport.default.connection_factory'));
309+
$this->assertEquals(
310+
sprintf('enqueue.transport.%s.connection_factory', 'default_fs'),
311+
(string) $container->getAlias('enqueue.transport.default.connection_factory')
312+
);
313+
314+
$this->assertTrue($container->hasAlias('enqueue.transport.connection_factory'));
315+
$this->assertEquals(
316+
'enqueue.transport.default.connection_factory',
317+
(string) $container->getAlias('enqueue.transport.connection_factory')
318+
);
319+
}
320+
269321
public static function provideDSNs()
270322
{
271323
yield ['amqp+ext:', 'default_amqp'];

0 commit comments

Comments
 (0)