diff --git a/.github/expected-missing-return-types.diff b/.github/expected-missing-return-types.diff index 44c36b78f363e..c29c325a61448 100644 --- a/.github/expected-missing-return-types.diff +++ b/.github/expected-missing-return-types.diff @@ -8,31 +8,24 @@ git checkout src/Symfony/Contracts/Service/ResetInterface.php git checkout composer.json src/ diff --git a/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php b/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php -index ada5fcbd49..51af652f08 100644 +index f127a38708..ed7fd8b1b6 100644 --- a/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php +++ b/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php -@@ -51,5 +51,5 @@ class DoctrineDataCollector extends DataCollector - * @return void - */ -- public function addLogger(string $name, DebugStack $logger) -+ public function addLogger(string $name, DebugStack $logger): void - { - $this->loggers[$name] = $logger; -@@ -59,5 +59,5 @@ class DoctrineDataCollector extends DataCollector +@@ -49,5 +49,5 @@ class DoctrineDataCollector extends DataCollector * @return void */ - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { $this->data = [ -@@ -90,5 +90,5 @@ class DoctrineDataCollector extends DataCollector +@@ -80,5 +80,5 @@ class DoctrineDataCollector extends DataCollector * @return void */ - public function reset() + public function reset(): void { $this->data = []; -@@ -119,5 +119,5 @@ class DoctrineDataCollector extends DataCollector +@@ -109,5 +109,5 @@ class DoctrineDataCollector extends DataCollector * @return int */ - public function getQueryCount() @@ -201,17 +194,6 @@ index c096b558db..8d584900a9 100644 + public function configureOptions(OptionsResolver $resolver): void { parent::configureOptions($resolver); -diff --git a/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php b/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php -index b2369e95d6..c33484608e 100644 ---- a/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php -+++ b/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php -@@ -52,5 +52,5 @@ class DbalLogger implements SQLLogger - * @return void - */ -- protected function log(string $message, array $params) -+ protected function log(string $message, array $params): void - { - $this->logger->debug($message, $params); diff --git a/src/Symfony/Bridge/Doctrine/Messenger/DoctrineClearEntityManagerWorkerSubscriber.php b/src/Symfony/Bridge/Doctrine/Messenger/DoctrineClearEntityManagerWorkerSubscriber.php index 38618fc15e..eb599eb0b4 100644 --- a/src/Symfony/Bridge/Doctrine/Messenger/DoctrineClearEntityManagerWorkerSubscriber.php @@ -999,17 +981,17 @@ index a2c5815e4b..1c9721ccc6 100644 + public function addConfiguration(NodeDefinition $builder): void; } diff --git a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php -index 37978b285f..ca1f5ae517 100644 +index 3c504b6001..55f1a0353b 100644 --- a/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php +++ b/src/Symfony/Bundle/SecurityBundle/DependencyInjection/SecurityExtension.php -@@ -82,5 +82,5 @@ class SecurityExtension extends Extension implements PrependExtensionInterface +@@ -83,5 +83,5 @@ class SecurityExtension extends Extension implements PrependExtensionInterface * @return void */ - public function prepend(ContainerBuilder $container) + public function prepend(ContainerBuilder $container): void { foreach ($this->getSortedFactories() as $factory) { -@@ -94,5 +94,5 @@ class SecurityExtension extends Extension implements PrependExtensionInterface +@@ -95,5 +95,5 @@ class SecurityExtension extends Extension implements PrependExtensionInterface * @return void */ - public function load(array $configs, ContainerBuilder $container) @@ -4698,7 +4680,7 @@ index f610b014a0..9458751c28 100644 + abstract protected function setNode(\DOMElement $node): void; } diff --git a/src/Symfony/Component/DomCrawler/Crawler.php b/src/Symfony/Component/DomCrawler/Crawler.php -index 59eec3068c..b750e80938 100644 +index 274aeee5fc..ccf37dae8b 100644 --- a/src/Symfony/Component/DomCrawler/Crawler.php +++ b/src/Symfony/Component/DomCrawler/Crawler.php @@ -96,5 +96,5 @@ class Crawler implements \Countable, \IteratorAggregate @@ -8383,7 +8365,7 @@ index efa1a4f737..752eb19faf 100644 + public function lateCollect(): void; } diff --git a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php -index 094683ccce..5582af522e 100644 +index 91e17358a0..d1c8bfe7d0 100644 --- a/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php +++ b/src/Symfony/Component/HttpKernel/DataCollector/RequestDataCollector.php @@ -199,5 +199,5 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter @@ -8964,7 +8946,7 @@ index 0f3630e7fe..ddf77b8a19 100644 { return <<<'EOF' diff --git a/src/Symfony/Component/HttpKernel/Kernel.php b/src/Symfony/Component/HttpKernel/Kernel.php -index 9d4c5f22b3..4030ab8b12 100644 +index 76205bc0b8..f4240cdd1b 100644 --- a/src/Symfony/Component/HttpKernel/Kernel.php +++ b/src/Symfony/Component/HttpKernel/Kernel.php @@ -107,5 +107,5 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl @@ -10911,7 +10893,7 @@ index bde72c0eb0..3d6813e1d4 100644 { if (!\is_array($config)) { diff --git a/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php b/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php -index e92a5ea3d7..4a0af31349 100644 +index 0e740bdf6c..21b68e3600 100644 --- a/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php +++ b/src/Symfony/Component/Routing/Matcher/Dumper/CompiledUrlMatcherDumper.php @@ -54,5 +54,5 @@ EOF; @@ -13947,7 +13929,7 @@ index d2d3fc1294..c28829f4e2 100644 { $a += [ diff --git a/src/Symfony/Component/VarDumper/Caster/DateCaster.php b/src/Symfony/Component/VarDumper/Caster/DateCaster.php -index 1394a78132..ee8471c88f 100644 +index 2779b37f9e..4bb25e9966 100644 --- a/src/Symfony/Component/VarDumper/Caster/DateCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/DateCaster.php @@ -28,5 +28,5 @@ class DateCaster @@ -14292,7 +14274,7 @@ index 6ff046754d..2b9382f1a7 100644 { $prefix = Caster::PREFIX_VIRTUAL; diff --git a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php -index 4adb9bc9fe..bc151bb2a2 100644 +index a356729bd0..a3f1b49e4e 100644 --- a/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php +++ b/src/Symfony/Component/VarDumper/Caster/ReflectionCaster.php @@ -39,5 +39,5 @@ class ReflectionCaster diff --git a/UPGRADE-7.0.md b/UPGRADE-7.0.md index f87b0113cf1f5..af7e00c588157 100644 --- a/UPGRADE-7.0.md +++ b/UPGRADE-7.0.md @@ -5,6 +5,17 @@ Symfony 6.4 and Symfony 7.0 will be released simultaneously at the end of Novemb release process, both versions will have the same features, but Symfony 7.0 won't include any deprecated features. To upgrade, make sure to resolve all deprecation notices. +DoctrineBridge +-------------- + + * Remove `DoctrineDbalCacheAdapterSchemaSubscriber`, use `DoctrineDbalCacheAdapterSchemaListener` instead + * Remove `MessengerTransportDoctrineSchemaSubscriber`, use `MessengerTransportDoctrineSchemaListener` instead + * Remove `RememberMeTokenProviderDoctrineSchemaSubscriber`, use `RememberMeTokenProviderDoctrineSchemaListener` instead + * Remove `DbalLogger`, use a middleware instead + * Remove `DoctrineDataCollector::addLogger()`, use a `DebugDataHolder` instead + * `ContainerAwareEventManager::getListeners()` must be called with an event name + * DoctrineBridge now requires `doctrine/event-manager:^2` + ProxyManagerBridge ------------------ diff --git a/composer.json b/composer.json index fd47788784b80..b088b44081615 100644 --- a/composer.json +++ b/composer.json @@ -36,7 +36,7 @@ "php": ">=8.2", "composer-runtime-api": ">=2.1", "ext-xml": "*", - "doctrine/event-manager": "^1.2|^2", + "doctrine/event-manager": "^2", "doctrine/persistence": "^2|^3", "twig/twig": "^2.13|^3.0.4", "psr/cache": "^2.0|^3.0", diff --git a/src/Symfony/Bridge/Doctrine/CHANGELOG.md b/src/Symfony/Bridge/Doctrine/CHANGELOG.md index 882940775bfd3..541f2fb779619 100644 --- a/src/Symfony/Bridge/Doctrine/CHANGELOG.md +++ b/src/Symfony/Bridge/Doctrine/CHANGELOG.md @@ -1,6 +1,17 @@ CHANGELOG ========= +7.0 +--- + + * Remove `DoctrineDbalCacheAdapterSchemaSubscriber`, use `DoctrineDbalCacheAdapterSchemaListener` instead + * Remove `MessengerTransportDoctrineSchemaSubscriber`, use `MessengerTransportDoctrineSchemaListener` instead + * Remove `RememberMeTokenProviderDoctrineSchemaSubscriber`, use `RememberMeTokenProviderDoctrineSchemaListener` instead + * Remove `DbalLogger`, use a middleware instead + * Remove `DoctrineDataCollector::addLogger()`, use a `DebugDataHolder` instead + * `ContainerAwareEventManager::getListeners()` must be called with an event name + * DoctrineBridge now requires `doctrine/event-manager:^2` + 6.4 --- diff --git a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php index 39983773ba615..b5919de26407e 100644 --- a/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php +++ b/src/Symfony/Bridge/Doctrine/ContainerAwareEventManager.php @@ -43,7 +43,7 @@ public function __construct(ContainerInterface $container, array $listeners = [] $this->listeners = $listeners; } - public function dispatchEvent($eventName, EventArgs $eventArgs = null): void + public function dispatchEvent(string $eventName, EventArgs $eventArgs = null): void { if (!$this->initializedSubscribers) { $this->initializeSubscribers(); @@ -63,13 +63,8 @@ public function dispatchEvent($eventName, EventArgs $eventArgs = null): void } } - public function getListeners($event = null): array + public function getListeners(string $event): array { - if (null === $event) { - trigger_deprecation('symfony/doctrine-bridge', '6.2', 'Calling "%s()" without an event name is deprecated. Call "getAllListeners()" instead.', __METHOD__); - - return $this->getAllListeners(); - } if (!$this->initializedSubscribers) { $this->initializeSubscribers(); } @@ -95,7 +90,7 @@ public function getAllListeners(): array return $this->listeners; } - public function hasListeners($event): bool + public function hasListeners(string $event): bool { if (!$this->initializedSubscribers) { $this->initializeSubscribers(); @@ -104,7 +99,7 @@ public function hasListeners($event): bool return isset($this->listeners[$event]) && $this->listeners[$event]; } - public function addEventListener($events, $listener): void + public function addEventListener(string|array $events, object|string $listener): void { if (!$this->initializedSubscribers) { $this->initializeSubscribers(); @@ -125,7 +120,7 @@ public function addEventListener($events, $listener): void } } - public function removeEventListener($events, $listener): void + public function removeEventListener(string|array $events, object|string $listener): void { if (!$this->initializedSubscribers) { $this->initializeSubscribers(); @@ -185,12 +180,8 @@ private function initializeSubscribers(): void $this->addEventListener(...$listener); continue; } - if (\is_string($listener)) { - $listener = $this->container->get($listener); - } - // throw new \InvalidArgumentException(sprintf('Using Doctrine subscriber "%s" is not allowed, declare it as a listener instead.', \is_object($listener) ? $listener::class : $listener)); - trigger_deprecation('symfony/doctrine-bridge', '6.3', 'Using Doctrine subscribers as services is deprecated, declare listeners instead'); - parent::addEventSubscriber($listener); + + throw new \InvalidArgumentException(sprintf('Using Doctrine subscriber "%s" is not allowed, declare it as a listener instead.', get_debug_type($listener))); } } diff --git a/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php b/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php index 8b57ff111cf0e..f127a38708f29 100644 --- a/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php +++ b/src/Symfony/Bridge/Doctrine/DataCollector/DoctrineDataCollector.php @@ -39,28 +39,10 @@ class DoctrineDataCollector extends DataCollector public function __construct( private ManagerRegistry $registry, - private ?DebugDataHolder $debugDataHolder = null, + private DebugDataHolder $debugDataHolder, ) { $this->connections = $registry->getConnectionNames(); $this->managers = $registry->getManagerNames(); - - if (null === $debugDataHolder) { - trigger_deprecation('symfony/doctrine-bridge', '6.4', 'Not passing an instance of "%s" as "$debugDataHolder" to "%s()" is deprecated.', DebugDataHolder::class, __METHOD__); - } - } - - /** - * Adds the stack logger for a connection. - * - * @return void - * - * @deprecated since Symfony 6.4, use a DebugDataHolder instead. - */ - public function addLogger(string $name, DebugStack $logger) - { - trigger_deprecation('symfony/doctrine-bridge', '6.4', '"%s()" is deprecated. Pass an instance of "%s" to the constructor instead.', __METHOD__, DebugDataHolder::class); - - $this->loggers[$name] = $logger; } /** diff --git a/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php b/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php deleted file mode 100644 index d1a70f79d24cd..0000000000000 --- a/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php +++ /dev/null @@ -1,91 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\Doctrine\Logger; - -use Doctrine\DBAL\Logging\SQLLogger; -use Psr\Log\LoggerInterface; -use Symfony\Component\Stopwatch\Stopwatch; - -trigger_deprecation('symfony/doctrine-bridge', '6.4', '"%s" is deprecated, use a middleware instead.', DbalLogger::class); - -/** - * @author Fabien Potencier - * - * @deprecated since Symfony 6.4, use a middleware instead. - */ -class DbalLogger implements SQLLogger -{ - public const MAX_STRING_LENGTH = 32; - public const BINARY_DATA_VALUE = '(binary value)'; - - protected $logger; - protected $stopwatch; - - public function __construct(LoggerInterface $logger = null, Stopwatch $stopwatch = null) - { - $this->logger = $logger; - $this->stopwatch = $stopwatch; - } - - public function startQuery($sql, array $params = null, array $types = null): void - { - $this->stopwatch?->start('doctrine', 'doctrine'); - - if (null !== $this->logger) { - $this->log($sql, null === $params ? [] : $this->normalizeParams($params)); - } - } - - public function stopQuery(): void - { - $this->stopwatch?->stop('doctrine'); - } - - /** - * Logs a message. - * - * @return void - */ - protected function log(string $message, array $params) - { - $this->logger->debug($message, $params); - } - - private function normalizeParams(array $params): array - { - foreach ($params as $index => $param) { - // normalize recursively - if (\is_array($param)) { - $params[$index] = $this->normalizeParams($param); - continue; - } - - if (!\is_string($params[$index])) { - continue; - } - - // non utf-8 strings break json encoding - if (!preg_match('//u', $params[$index])) { - $params[$index] = self::BINARY_DATA_VALUE; - continue; - } - - // detect if the too long string must be shorten - if (self::MAX_STRING_LENGTH < mb_strlen($params[$index], 'UTF-8')) { - $params[$index] = mb_substr($params[$index], 0, self::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]'; - continue; - } - } - - return $params; - } -} diff --git a/src/Symfony/Bridge/Doctrine/SchemaListener/DoctrineDbalCacheAdapterSchemaSubscriber.php b/src/Symfony/Bridge/Doctrine/SchemaListener/DoctrineDbalCacheAdapterSchemaSubscriber.php deleted file mode 100644 index 9aa98ebb5b9ba..0000000000000 --- a/src/Symfony/Bridge/Doctrine/SchemaListener/DoctrineDbalCacheAdapterSchemaSubscriber.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\Doctrine\SchemaListener; - -use Doctrine\Common\EventSubscriber; -use Doctrine\ORM\Tools\ToolEvents; - -trigger_deprecation('symfony/doctrine-bridge', '6.3', 'The "%s" class is deprecated. Use "%s" instead.', DoctrineDbalCacheAdapterSchemaSubscriber::class, DoctrineDbalCacheAdapterSchemaListener::class); - -/** - * Automatically adds the cache table needed for the DoctrineDbalAdapter of - * the Cache component. - * - * @author Ryan Weaver - * - * @deprecated since Symfony 6.3, use {@link DoctrineDbalCacheAdapterSchemaListener} instead - */ -final class DoctrineDbalCacheAdapterSchemaSubscriber extends DoctrineDbalCacheAdapterSchemaListener implements EventSubscriber -{ - public function getSubscribedEvents(): array - { - if (!class_exists(ToolEvents::class)) { - return []; - } - - return [ - ToolEvents::postGenerateSchema, - ]; - } -} diff --git a/src/Symfony/Bridge/Doctrine/SchemaListener/MessengerTransportDoctrineSchemaSubscriber.php b/src/Symfony/Bridge/Doctrine/SchemaListener/MessengerTransportDoctrineSchemaSubscriber.php deleted file mode 100644 index 10b2372ab161e..0000000000000 --- a/src/Symfony/Bridge/Doctrine/SchemaListener/MessengerTransportDoctrineSchemaSubscriber.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\Doctrine\SchemaListener; - -use Doctrine\Common\EventSubscriber; -use Doctrine\DBAL\Events; -use Doctrine\ORM\Tools\ToolEvents; - -trigger_deprecation('symfony/doctrine-bridge', '6.3', 'The "%s" class is deprecated. Use "%s" instead.', MessengerTransportDoctrineSchemaSubscriber::class, MessengerTransportDoctrineSchemaListener::class); - -/** - * Automatically adds any required database tables to the Doctrine Schema. - * - * @author Ryan Weaver - * - * @deprecated since Symfony 6.3, use {@link MessengerTransportDoctrineSchemaListener} instead - */ -final class MessengerTransportDoctrineSchemaSubscriber extends MessengerTransportDoctrineSchemaListener implements EventSubscriber -{ - public function getSubscribedEvents(): array - { - $subscribedEvents = []; - - if (class_exists(ToolEvents::class)) { - $subscribedEvents[] = ToolEvents::postGenerateSchema; - } - - if (class_exists(Events::class)) { - $subscribedEvents[] = Events::onSchemaCreateTable; - } - - return $subscribedEvents; - } -} diff --git a/src/Symfony/Bridge/Doctrine/SchemaListener/RememberMeTokenProviderDoctrineSchemaSubscriber.php b/src/Symfony/Bridge/Doctrine/SchemaListener/RememberMeTokenProviderDoctrineSchemaSubscriber.php deleted file mode 100644 index 82a5a7817b7b5..0000000000000 --- a/src/Symfony/Bridge/Doctrine/SchemaListener/RememberMeTokenProviderDoctrineSchemaSubscriber.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\Doctrine\SchemaListener; - -use Doctrine\Common\EventSubscriber; -use Doctrine\ORM\Tools\ToolEvents; -use Symfony\Bridge\Doctrine\Security\RememberMe\DoctrineTokenProvider; - -trigger_deprecation('symfony/doctrine-bridge', '6.3', 'The "%s" class is deprecated. Use "%s" instead.', RememberMeTokenProviderDoctrineSchemaSubscriber::class, RememberMeTokenProviderDoctrineSchemaListener::class); - -/** - * Automatically adds the rememberme table needed for the {@see DoctrineTokenProvider}. - * - * @author Wouter de Jong - * - * @deprecated since Symfony 6.3, use {@link RememberMeTokenProviderDoctrineSchemaListener} instead - */ -final class RememberMeTokenProviderDoctrineSchemaSubscriber extends RememberMeTokenProviderDoctrineSchemaListener implements EventSubscriber -{ - public function getSubscribedEvents(): array - { - if (!class_exists(ToolEvents::class)) { - return []; - } - - return [ - ToolEvents::postGenerateSchema, - ]; - } -} diff --git a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php index f215f4c774034..16cfaa5cffb9c 100644 --- a/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php +++ b/src/Symfony/Bridge/Doctrine/Tests/ContainerAwareEventManagerTest.php @@ -40,18 +40,13 @@ public function testDispatchEventRespectOrder() $this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners('foo'))); } - /** - * @group legacy - */ - public function testDispatchEventRespectOrderWithSubscribers() + public function testUsingDoctrineSubscribersThrows() { - $this->evm = new ContainerAwareEventManager($this->container, ['sub1', 'sub2']); + $this->evm = new ContainerAwareEventManager($this->container, [new MySubscriber(['foo'])]); - $this->container->set('sub1', $subscriber1 = new MySubscriber(['foo'])); - $this->container->set('sub2', $subscriber2 = new MySubscriber(['foo'])); - - $this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead'); - $this->assertSame([$subscriber1, $subscriber2], array_values($this->evm->getListeners('foo'))); + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('Using Doctrine subscriber "Symfony\Bridge\Doctrine\Tests\MySubscriber" is not allowed, declare it as a listener instead.'); + $this->evm->getListeners('foo'); } public function testDispatchEvent() @@ -81,40 +76,6 @@ public function testDispatchEvent() $this->assertSame(1, $listener5->calledByEventNameCount); } - /** - * @group legacy - */ - public function testDispatchEventWithSubscribers() - { - $this->evm = new ContainerAwareEventManager($this->container, ['lazy4']); - - $this->container->set('lazy4', $subscriber1 = new MySubscriber(['foo'])); - $this->assertSame(0, $subscriber1->calledSubscribedEventsCount); - - $this->container->set('lazy1', $listener1 = new MyListener()); - $this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead'); - $this->evm->addEventListener('foo', 'lazy1'); - $this->evm->addEventListener('foo', $listener2 = new MyListener()); - $this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar'])); - - $this->assertSame(1, $subscriber2->calledSubscribedEventsCount); - - $this->evm->dispatchEvent('foo'); - $this->evm->dispatchEvent('bar'); - - $this->assertSame(1, $subscriber1->calledSubscribedEventsCount); - $this->assertSame(1, $subscriber2->calledSubscribedEventsCount); - - $this->assertSame(0, $listener1->calledByInvokeCount); - $this->assertSame(1, $listener1->calledByEventNameCount); - $this->assertSame(0, $listener2->calledByInvokeCount); - $this->assertSame(1, $listener2->calledByEventNameCount); - $this->assertSame(0, $subscriber1->calledByInvokeCount); - $this->assertSame(1, $subscriber1->calledByEventNameCount); - $this->assertSame(1, $subscriber2->calledByInvokeCount); - $this->assertSame(0, $subscriber2->calledByEventNameCount); - } - public function testAddEventListenerAfterDispatchEvent() { $this->container->set('lazy1', $listener1 = new MyListener()); @@ -166,60 +127,6 @@ public function testAddEventListenerAfterDispatchEvent() $this->assertSame(1, $listener10->calledByEventNameCount); } - /** - * @group legacy - */ - public function testAddEventListenerAndSubscriberAfterDispatchEvent() - { - $this->evm = new ContainerAwareEventManager($this->container, ['lazy7']); - - $this->container->set('lazy7', $subscriber1 = new MySubscriber(['foo'])); - $this->assertSame(0, $subscriber1->calledSubscribedEventsCount); - - $this->container->set('lazy1', $listener1 = new MyListener()); - $this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead'); - $this->evm->addEventListener('foo', 'lazy1'); - $this->assertSame(1, $subscriber1->calledSubscribedEventsCount); - - $this->evm->addEventSubscriber($subscriber2 = new MySubscriber(['bar'])); - - $this->assertSame(1, $subscriber2->calledSubscribedEventsCount); - - $this->evm->dispatchEvent('foo'); - $this->evm->dispatchEvent('bar'); - - $this->assertSame(1, $subscriber1->calledSubscribedEventsCount); - $this->assertSame(1, $subscriber2->calledSubscribedEventsCount); - - $this->container->set('lazy6', $listener2 = new MyListener()); - $this->evm->addEventListener('foo', $listener2 = new MyListener()); - $this->evm->addEventListener('bar', $listener2); - $this->evm->addEventSubscriber($subscriber3 = new MySubscriber(['bar'])); - - $this->assertSame(1, $subscriber1->calledSubscribedEventsCount); - $this->assertSame(1, $subscriber2->calledSubscribedEventsCount); - $this->assertSame(1, $subscriber3->calledSubscribedEventsCount); - - $this->evm->dispatchEvent('foo'); - $this->evm->dispatchEvent('bar'); - - $this->assertSame(1, $subscriber1->calledSubscribedEventsCount); - $this->assertSame(1, $subscriber2->calledSubscribedEventsCount); - $this->assertSame(1, $subscriber3->calledSubscribedEventsCount); - - $this->assertSame(0, $listener1->calledByInvokeCount); - $this->assertSame(2, $listener1->calledByEventNameCount); - $this->assertSame(0, $subscriber1->calledByInvokeCount); - $this->assertSame(2, $subscriber1->calledByEventNameCount); - $this->assertSame(2, $subscriber2->calledByInvokeCount); - $this->assertSame(0, $subscriber2->calledByEventNameCount); - - $this->assertSame(1, $listener2->calledByInvokeCount); - $this->assertSame(1, $listener2->calledByEventNameCount); - $this->assertSame(1, $subscriber3->calledByInvokeCount); - $this->assertSame(0, $subscriber3->calledByEventNameCount); - } - public function testGetListenersForEvent() { $this->container->set('lazy', $listener1 = new MyListener()); @@ -229,36 +136,6 @@ public function testGetListenersForEvent() $this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners('foo'))); } - /** - * @group legacy - */ - public function testGetListenersForEventWhenSubscribersArePresent() - { - $this->evm = new ContainerAwareEventManager($this->container, ['lazy2']); - - $this->container->set('lazy', $listener1 = new MyListener()); - $this->container->set('lazy2', $subscriber1 = new MySubscriber(['foo'])); - $this->expectDeprecation('Since symfony/doctrine-bridge 6.3: Using Doctrine subscribers as services is deprecated, declare listeners instead'); - $this->evm->addEventListener('foo', 'lazy'); - $this->evm->addEventListener('foo', $listener2 = new MyListener()); - - $this->assertSame([$subscriber1, $listener1, $listener2], array_values($this->evm->getListeners('foo'))); - } - - /** - * @group legacy - */ - public function testGetListeners() - { - $this->container->set('lazy', $listener1 = new MyListener()); - $this->evm->addEventListener('foo', 'lazy'); - $this->evm->addEventListener('foo', $listener2 = new MyListener()); - - $this->expectDeprecation('Since symfony/doctrine-bridge 6.2: Calling "Symfony\Bridge\Doctrine\ContainerAwareEventManager::getListeners()" without an event name is deprecated. Call "getAllListeners()" instead.'); - - $this->assertSame([$listener1, $listener2], array_values($this->evm->getListeners()['foo'])); - } - public function testGetAllListeners() { $this->container->set('lazy', $listener1 = new MyListener()); @@ -299,15 +176,15 @@ public function testRemoveEventListenerAfterDispatchEvent() class MyListener { - public $calledByInvokeCount = 0; - public $calledByEventNameCount = 0; + public int $calledByInvokeCount = 0; + public int $calledByEventNameCount = 0; - public function __invoke() + public function __invoke(): void { ++$this->calledByInvokeCount; } - public function foo() + public function foo(): void { ++$this->calledByEventNameCount; } @@ -315,8 +192,8 @@ public function foo() class MySubscriber extends MyListener implements EventSubscriber { - public $calledSubscribedEventsCount = 0; - private $listenedEvents; + public int $calledSubscribedEventsCount = 0; + private array $listenedEvents; public function __construct(array $listenedEvents) { diff --git a/src/Symfony/Bridge/Doctrine/Tests/DataCollector/DoctrineDataCollectorWithDebugStackTest.php b/src/Symfony/Bridge/Doctrine/Tests/DataCollector/DoctrineDataCollectorWithDebugStackTest.php deleted file mode 100644 index 4108e06592aa3..0000000000000 --- a/src/Symfony/Bridge/Doctrine/Tests/DataCollector/DoctrineDataCollectorWithDebugStackTest.php +++ /dev/null @@ -1,201 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\Doctrine\Tests\DataCollector; - -use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Logging\DebugStack; -use Doctrine\DBAL\Platforms\MySQLPlatform; -use Doctrine\Persistence\ManagerRegistry; -use PHPUnit\Framework\TestCase; -use Symfony\Bridge\Doctrine\DataCollector\DoctrineDataCollector; -use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait; -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\VarDumper\Cloner\Data; -use Symfony\Component\VarDumper\Dumper\CliDumper; - -// Doctrine DBAL 2 compatibility -class_exists(\Doctrine\DBAL\Platforms\MySqlPlatform::class); - -/** - * @group legacy - */ -class DoctrineDataCollectorWithDebugStackTest extends TestCase -{ - use DoctrineDataCollectorTestTrait; - use ExpectDeprecationTrait; - - public function testReset() - { - $queries = [ - ['sql' => 'SELECT * FROM table1', 'params' => [], 'types' => [], 'executionMS' => 1], - ]; - $c = $this->createCollector($queries); - $c->collect(new Request(), new Response()); - - $c->reset(); - $c->collect(new Request(), new Response()); - $c = unserialize(serialize($c)); - - $this->assertEquals(['default' => []], $c->getQueries()); - } - - /** - * @dataProvider paramProvider - */ - public function testCollectQueries($param, $types, $expected, $explainable, bool $runnable = true) - { - $queries = [ - ['sql' => 'SELECT * FROM table1 WHERE field1 = ?1', 'params' => [$param], 'types' => $types, 'executionMS' => 1], - ]; - $c = $this->createCollector($queries); - $c->collect(new Request(), new Response()); - $c = unserialize(serialize($c)); - - $collectedQueries = $c->getQueries(); - - $collectedParam = $collectedQueries['default'][0]['params'][0]; - if ($collectedParam instanceof Data) { - $dumper = new CliDumper($out = fopen('php://memory', 'r+')); - $dumper->setColors(false); - $collectedParam->dump($dumper); - $this->assertStringMatchesFormat($expected, print_r(stream_get_contents($out, -1, 0), true)); - } elseif (\is_string($expected)) { - $this->assertStringMatchesFormat($expected, $collectedParam); - } else { - $this->assertEquals($expected, $collectedParam); - } - - $this->assertEquals($explainable, $collectedQueries['default'][0]['explainable']); - $this->assertSame($runnable, $collectedQueries['default'][0]['runnable']); - } - - /** - * @dataProvider paramProvider - */ - public function testSerialization($param, array $types, $expected, $explainable, bool $runnable = true) - { - $queries = [ - ['sql' => 'SELECT * FROM table1 WHERE field1 = ?1', 'params' => [$param], 'types' => $types, 'executionMS' => 1], - ]; - $c = $this->createCollector($queries); - $c->collect(new Request(), new Response()); - $c = unserialize(serialize($c)); - - $collectedQueries = $c->getQueries(); - - $collectedParam = $collectedQueries['default'][0]['params'][0]; - if ($collectedParam instanceof Data) { - $dumper = new CliDumper($out = fopen('php://memory', 'r+')); - $dumper->setColors(false); - $collectedParam->dump($dumper); - $this->assertStringMatchesFormat($expected, print_r(stream_get_contents($out, -1, 0), true)); - } elseif (\is_string($expected)) { - $this->assertStringMatchesFormat($expected, $collectedParam); - } else { - $this->assertEquals($expected, $collectedParam); - } - - $this->assertEquals($explainable, $collectedQueries['default'][0]['explainable']); - $this->assertSame($runnable, $collectedQueries['default'][0]['runnable']); - } - - public static function paramProvider(): array - { - return [ - ['some value', [], 'some value', true], - [1, [], 1, true], - [true, [], true, true], - [null, [], null, true], - [new \DateTime('2011-09-11'), ['date'], '2011-09-11', true], - [new \DateTimeImmutable('2011-09-11'), ['date_immutable'], '2011-09-11', true], - [fopen(__FILE__, 'r'), [], '/* Resource(stream) */', false, false], - [ - new \stdClass(), - [], - <<getMockBuilder(Connection::class) - ->disableOriginalConstructor() - ->getMock(); - $connection->expects($this->any()) - ->method('getDatabasePlatform') - ->willReturn(new MySqlPlatform()); - - $registry = $this->createMock(ManagerRegistry::class); - $registry - ->expects($this->any()) - ->method('getConnectionNames') - ->willReturn(['default' => 'doctrine.dbal.default_connection']); - $registry - ->expects($this->any()) - ->method('getManagerNames') - ->willReturn(['default' => 'doctrine.orm.default_entity_manager']); - $registry->expects($this->any()) - ->method('getConnection') - ->willReturn($connection); - - $this->expectDeprecation('Since symfony/doctrine-bridge 6.4: Not passing an instance of "Symfony\Bridge\Doctrine\Middleware\Debug\DebugDataHolder" as "$debugDataHolder" to "Symfony\Bridge\Doctrine\DataCollector\DoctrineDataCollector::__construct()" is deprecated.'); - $collector = new DoctrineDataCollector($registry); - $logger = $this->createMock(DebugStack::class); - $logger->queries = $queries; - - $this->expectDeprecation('Since symfony/doctrine-bridge 6.4: "Symfony\Bridge\Doctrine\DataCollector\DoctrineDataCollector::addLogger()" is deprecated. Pass an instance of "Symfony\Bridge\Doctrine\Middleware\Debug\DebugDataHolder" to the constructor instead.'); - $collector->addLogger('default', $logger); - - return $collector; - } -} - -class StringRepresentableClass -{ - public function __toString(): string - { - return 'string representation'; - } -} diff --git a/src/Symfony/Bridge/Doctrine/Tests/Logger/DbalLoggerTest.php b/src/Symfony/Bridge/Doctrine/Tests/Logger/DbalLoggerTest.php deleted file mode 100644 index 2e9ed80e3115a..0000000000000 --- a/src/Symfony/Bridge/Doctrine/Tests/Logger/DbalLoggerTest.php +++ /dev/null @@ -1,173 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Bridge\Doctrine\Tests\Logger; - -use PHPUnit\Framework\TestCase; -use Psr\Log\LoggerInterface; -use Symfony\Bridge\Doctrine\Logger\DbalLogger; - -/** - * @group legacy - */ -class DbalLoggerTest extends TestCase -{ - /** - * @dataProvider getLogFixtures - */ - public function testLog($sql, $params, $logParams) - { - $logger = $this->createMock(LoggerInterface::class); - - $dbalLogger = $this - ->getMockBuilder(DbalLogger::class) - ->setConstructorArgs([$logger, null]) - ->onlyMethods(['log']) - ->getMock() - ; - - $dbalLogger - ->expects($this->once()) - ->method('log') - ->with($sql, $logParams) - ; - - $dbalLogger->startQuery($sql, $params); - } - - public static function getLogFixtures() - { - return [ - ['SQL', null, []], - ['SQL', [], []], - ['SQL', ['foo' => 'bar'], ['foo' => 'bar']], - ['SQL', ['foo' => "\x7F\xFF"], ['foo' => '(binary value)']], - ['SQL', ['foo' => "bar\x7F\xFF"], ['foo' => '(binary value)']], - ['SQL', ['foo' => ''], ['foo' => '']], - ]; - } - - public function testLogNonUtf8() - { - $logger = $this->createMock(LoggerInterface::class); - - $dbalLogger = $this - ->getMockBuilder(DbalLogger::class) - ->setConstructorArgs([$logger, null]) - ->onlyMethods(['log']) - ->getMock() - ; - - $dbalLogger - ->expects($this->once()) - ->method('log') - ->with('SQL', ['utf8' => 'foo', 'nonutf8' => DbalLogger::BINARY_DATA_VALUE]) - ; - - $dbalLogger->startQuery('SQL', [ - 'utf8' => 'foo', - 'nonutf8' => "\x7F\xFF", - ]); - } - - public function testLogNonUtf8Array() - { - $logger = $this->createMock(LoggerInterface::class); - - $dbalLogger = $this - ->getMockBuilder(DbalLogger::class) - ->setConstructorArgs([$logger, null]) - ->onlyMethods(['log']) - ->getMock() - ; - - $dbalLogger - ->expects($this->once()) - ->method('log') - ->with('SQL', [ - 'utf8' => 'foo', - [ - 'nonutf8' => DbalLogger::BINARY_DATA_VALUE, - ], - ] - ) - ; - - $dbalLogger->startQuery('SQL', [ - 'utf8' => 'foo', - [ - 'nonutf8' => "\x7F\xFF", - ], - ]); - } - - public function testLogLongString() - { - $logger = $this->createMock(LoggerInterface::class); - - $dbalLogger = $this - ->getMockBuilder(DbalLogger::class) - ->setConstructorArgs([$logger, null]) - ->onlyMethods(['log']) - ->getMock() - ; - - $testString = 'abc'; - - $shortString = str_pad('', DbalLogger::MAX_STRING_LENGTH, $testString); - $longString = str_pad('', DbalLogger::MAX_STRING_LENGTH + 1, $testString); - - $dbalLogger - ->expects($this->once()) - ->method('log') - ->with('SQL', ['short' => $shortString, 'long' => substr($longString, 0, DbalLogger::MAX_STRING_LENGTH - 6).' [...]']) - ; - - $dbalLogger->startQuery('SQL', [ - 'short' => $shortString, - 'long' => $longString, - ]); - } - - public function testLogUTF8LongString() - { - $logger = $this->createMock(LoggerInterface::class); - - $dbalLogger = $this - ->getMockBuilder(DbalLogger::class) - ->setConstructorArgs([$logger, null]) - ->onlyMethods(['log']) - ->getMock() - ; - - $testStringArray = ['é', 'á', 'ű', 'ő', 'ú', 'ö', 'ü', 'ó', 'í']; - $testStringCount = \count($testStringArray); - - $shortString = ''; - $longString = ''; - for ($i = 1; $i <= DbalLogger::MAX_STRING_LENGTH; ++$i) { - $shortString .= $testStringArray[$i % $testStringCount]; - $longString .= $testStringArray[$i % $testStringCount]; - } - $longString .= $testStringArray[$i % $testStringCount]; - - $dbalLogger - ->expects($this->once()) - ->method('log') - ->with('SQL', ['short' => $shortString, 'long' => mb_substr($longString, 0, DbalLogger::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]']) - ; - - $dbalLogger->startQuery('SQL', [ - 'short' => $shortString, - 'long' => $longString, - ]); - } -} diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json index 9564433d50ddc..ac4c06083cec2 100644 --- a/src/Symfony/Bridge/Doctrine/composer.json +++ b/src/Symfony/Bridge/Doctrine/composer.json @@ -17,9 +17,8 @@ ], "require": { "php": ">=8.2", - "doctrine/event-manager": "^1.2|^2", + "doctrine/event-manager": "^2", "doctrine/persistence": "^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3" pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy