diff --git a/composer.json b/composer.json
index 4af78805..58c35297 100644
--- a/composer.json
+++ b/composer.json
@@ -42,7 +42,7 @@
},
"require-dev": {
"doctrine/dbal": "^2.13||^3.0",
- "doctrine/doctrine-bundle": "^1.12||^2.5",
+ "doctrine/doctrine-bundle": "^2.6",
"friendsofphp/php-cs-fixer": "^2.19||^3.40",
"masterminds/html5": "^2.8",
"phpstan/extension-installer": "^1.0",
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
index d90f7ff1..4b631601 100644
--- a/phpstan-baseline.neon
+++ b/phpstan-baseline.neon
@@ -1,10 +1,5 @@
parameters:
ignoreErrors:
- -
- message: "#^Parameter \\#1 \\.\\.\\.\\$arrays of function array_merge expects array, mixed given\\.$#"
- count: 1
- path: src/DependencyInjection/Compiler/DbalTracingPass.php
-
-
message: "#^Call to an undefined method Symfony\\\\Component\\\\Config\\\\Definition\\\\Builder\\\\TreeBuilder\\:\\:root\\(\\)\\.$#"
count: 1
diff --git a/src/DependencyInjection/Compiler/DbalTracingPass.php b/src/DependencyInjection/Compiler/DbalTracingPass.php
index d1e4d37f..e867a781 100644
--- a/src/DependencyInjection/Compiler/DbalTracingPass.php
+++ b/src/DependencyInjection/Compiler/DbalTracingPass.php
@@ -9,7 +9,6 @@
use Sentry\SentryBundle\Tracing\Doctrine\DBAL\TracingDriverMiddleware;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;
final class DbalTracingPass implements CompilerPassInterface
@@ -20,12 +19,6 @@ final class DbalTracingPass implements CompilerPassInterface
*/
private const CONNECTION_SERVICE_NAME_FORMAT = 'doctrine.dbal.%s_connection';
- /**
- * This is the format used by the DoctrineBundle bundle to register the
- * services for each connection's configuration.
- */
- private const CONNECTION_CONFIG_SERVICE_NAME_FORMAT = 'doctrine.dbal.%s_connection.configuration';
-
/**
* {@inheritdoc}
*/
@@ -66,13 +59,8 @@ public function process(ContainerBuilder $container): void
private function configureConnectionForDoctrineDBALVersion3(ContainerBuilder $container, string $connectionName): void
{
- $configurationDefinition = $container->getDefinition(sprintf(self::CONNECTION_CONFIG_SERVICE_NAME_FORMAT, $connectionName));
- $setMiddlewaresMethodCallArguments = $this->getSetMiddlewaresMethodCallArguments($configurationDefinition);
- $setMiddlewaresMethodCallArguments[0] = array_merge($setMiddlewaresMethodCallArguments[0] ?? [], [new Reference(TracingDriverMiddleware::class)]);
-
- $configurationDefinition
- ->removeMethodCall('setMiddlewares')
- ->addMethodCall('setMiddlewares', $setMiddlewaresMethodCallArguments);
+ $tracingMiddlewareDefinition = $container->getDefinition(TracingDriverMiddleware::class);
+ $tracingMiddlewareDefinition->addTag('doctrine.middleware', ['connection' => $connectionName]);
}
private function configureConnectionForDoctrineDBALVersion2(ContainerBuilder $container, string $connectionName): void
@@ -81,20 +69,6 @@ private function configureConnectionForDoctrineDBALVersion2(ContainerBuilder $co
$connectionDefinition->setConfigurator([new Reference(ConnectionConfigurator::class), 'configure']);
}
- /**
- * @return mixed[]
- */
- private function getSetMiddlewaresMethodCallArguments(Definition $definition): array
- {
- foreach ($definition->getMethodCalls() as $methodCall) {
- if ('setMiddlewares' === $methodCall[0]) {
- return $methodCall[1];
- }
- }
-
- return [];
- }
-
private function assertRequiredDbalVersion(): void
{
if (interface_exists(Result::class)) {
diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml
index ed762306..74682cc6 100644
--- a/src/Resources/config/services.xml
+++ b/src/Resources/config/services.xml
@@ -106,6 +106,7 @@
+
diff --git a/src/SentryBundle.php b/src/SentryBundle.php
index aacd5126..ed813dea 100644
--- a/src/SentryBundle.php
+++ b/src/SentryBundle.php
@@ -8,6 +8,7 @@
use Sentry\SentryBundle\DependencyInjection\Compiler\CacheTracingPass;
use Sentry\SentryBundle\DependencyInjection\Compiler\DbalTracingPass;
use Sentry\SentryBundle\DependencyInjection\Compiler\HttpClientTracingPass;
+use Symfony\Component\DependencyInjection\Compiler\PassConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
@@ -21,7 +22,7 @@ public function build(ContainerBuilder $container): void
{
parent::build($container);
- $container->addCompilerPass(new DbalTracingPass());
+ $container->addCompilerPass(new DbalTracingPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 10);
$container->addCompilerPass(new CacheTracingPass());
$container->addCompilerPass(new HttpClientTracingPass());
$container->addCompilerPass(new AddLoginListenerTagPass());
diff --git a/tests/DependencyInjection/Compiler/DbalTracingPassTest.php b/tests/DependencyInjection/Compiler/DbalTracingPassTest.php
index 93a6b5d7..dc850b20 100644
--- a/tests/DependencyInjection/Compiler/DbalTracingPassTest.php
+++ b/tests/DependencyInjection/Compiler/DbalTracingPassTest.php
@@ -23,62 +23,15 @@ public function testProcessWithDoctrineDBALVersionAtLeast30(): void
}
$container = $this->createContainerBuilder();
- $container->setParameter('sentry.tracing.dbal.connections', ['foo', 'bar', 'baz']);
-
- $container
- ->register('foo.service', \stdClass::class)
- ->setPublic(true);
-
- $container
- ->register('doctrine.dbal.foo_connection.configuration', Configuration::class)
- ->setPublic(true);
-
- $container
- ->register('doctrine.dbal.bar_connection.configuration', Configuration::class)
- ->addMethodCall('setMiddlewares', [[]])
- ->setPublic(true);
-
- $container
- ->register('doctrine.dbal.baz_connection.configuration', Configuration::class)
- ->addMethodCall('setMiddlewares', [[new Reference('foo.service')]])
- ->setPublic(true);
-
+ $container->setParameter('sentry.tracing.dbal.connections', ['foo', 'bar']);
$container->compile();
- $this->assertEquals(
- [
- [
- 'setMiddlewares',
- [[new Reference(TracingDriverMiddleware::class)]],
- ],
- ],
- $container->getDefinition('doctrine.dbal.foo_connection.configuration')->getMethodCalls()
- );
-
- $this->assertEquals(
- [
- [
- 'setMiddlewares',
- [[new Reference(TracingDriverMiddleware::class)]],
- ],
- ],
- $container->getDefinition('doctrine.dbal.bar_connection.configuration')->getMethodCalls()
- );
-
- $this->assertEquals(
- [
- [
- 'setMiddlewares',
- [
- [
- new Reference('foo.service'),
- new Reference(TracingDriverMiddleware::class),
- ],
- ],
- ],
- ],
- $container->getDefinition('doctrine.dbal.baz_connection.configuration')->getMethodCalls()
- );
+ $tracingMiddlewareDefinition = $container->getDefinition(TracingDriverMiddleware::class);
+ $doctrineMiddlewareTags = $tracingMiddlewareDefinition->getTag('doctrine.middleware');
+
+ $this->assertCount(2, $doctrineMiddlewareTags);
+ $this->assertSame(['connection' => 'foo'], $doctrineMiddlewareTags[0]);
+ $this->assertSame(['connection' => 'bar'], $doctrineMiddlewareTags[1]);
}
public function testProcessWithDoctrineDBALVersionLowerThan30(): void