Skip to content

Commit 450c24d

Browse files
authored
Merge pull request #285 from Kal74/master
[#280] Retrieve PDO instance from SessionHandler for PeriodicPing defintion
2 parents 2c2e2d7 + 03b3e97 commit 450c24d

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

DependencyInjection/CompilerPass/PingableDriverCompilerPass.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
66
use Symfony\Component\DependencyInjection\ContainerBuilder;
77
use Symfony\Component\DependencyInjection\Reference;
8+
use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler;
89

910
class PingableDriverCompilerPass implements CompilerPassInterface
1011
{
@@ -23,10 +24,19 @@ public function process(ContainerBuilder $container)
2324

2425
$sessionHandlerDefinition = $container->getDefinition((string) $container->getAlias('gos_web_socket.session_handler'));
2526

26-
if (!\in_array(\SessionHandlerInterface::class, \class_implements($sessionHandlerDefinition->getClass()), true)) {
27+
if (!class_exists($sessionHandlerDefinition->getClass()) || !\in_array(PdoSessionHandler::class, \class_parents($sessionHandlerDefinition->getClass()), true)) {
2728
return;
2829
}
2930

31+
if (!$container->hasDefinition('pdo') || !$container->hasAlias('pdo')) {
32+
$pdoReference = $sessionHandlerDefinition->getArgument(0);
33+
if (!$pdoReference instanceof Reference || \PDO::class !== $container->getDefinition((string) $pdoReference)->getClass()) {
34+
return;
35+
}
36+
$periodicPingDefinition = $container->getDefinition('gos_web_socket.pdo.periodic_ping');
37+
$periodicPingDefinition->setArgument(0, $pdoReference);
38+
}
39+
3040
$periodicRegistryDef = $container->getDefinition('gos_web_socket.periodic.registry');
3141

3242
$pdoDriver = ['pdo_mysql', 'pdo_sqlite', 'pdo_pgsql'];

0 commit comments

Comments
 (0)