8000 [DoctrineBridge] deprecate doctrine schema subscribers in favor of li… · symfony/symfony@787d569 · GitHub
[go: up one dir, main page]

Skip to content

Commit 787d569

Browse files
committed
[DoctrineBridge] deprecate doctrine schema subscribers in favor of listeners
1 parent 526e0b2 commit 787d569

14 files changed

+236
-138
lines changed

UPGRADE-6.3.md

+7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ DependencyInjection
1313
* Deprecate `PhpDumper` options `inline_factories_parameter` and `inline_class_loader_parameter`, use `inline_factories` and `inline_class_loader` instead
1414
* Deprecate undefined and numeric keys with `service_locator` config, use string aliases instead
1515

16+
DoctrineBridge
17+
--------------
18+
19+
* Deprecate `DoctrineDbalCacheAdapterSchemaSubscriber` in favor of `DoctrineDbalCacheAdapterSchemaListener`
20+
* Deprecate `MessengerTransportDoctrineSchemaSubscriber` in favor of `MessengerTransportDoctrineSchemaListener`
21+
* Deprecate `RememberMeTokenProviderDoctrineSchemaSubscriber` in favor of `RememberMeTokenProviderDoctrineSchemaListener`
22+
1623
FrameworkBundle
1724
---------------
1825

src/Symfony/Bridge/Doctrine/CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
CHANGELOG
22
=========
33

4+
6.3
5+
---
6+
7+
* Add `AbstractSchemaListener`, `LockStoreSchemaListener` and `PdoSessionHandlerSchemaListener`
8+
* Deprecate `DoctrineDbalCacheAdapterSchemaSubscriber` in favor of `DoctrineDbalCacheAdapterSchemaListener`
9+
* Deprecate `MessengerTransportDoctrineSchemaSubscriber` in favor of `MessengerTransportDoctrineSchemaListener`
10+
* Deprecate `RememberMeTokenProviderDoctrineSchemaSubscriber` in favor of `RememberMeTokenProviderDoctrineSchemaListener`
11+
412
6.2
513
---
614

src/Symfony/Bridge/Doctrine/SchemaListener/AbstractSchemaSubscriber.php renamed to src/Symfony/Bridge/Doctrine/SchemaListener/AbstractSchemaListener.php

+1-14
Original file line numberDiff line numberDiff line change
@@ -11,27 +11,14 @@
1111

1212
namespace Symfony\Bridge\Doctrine\SchemaListener;
1313

14-
use Doctrine\Common\EventSubscriber;
1514
use Doctrine\DBAL\Connection;
1615
use Doctrine\DBAL\Exception\TableNotFoundException;
1716
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
18-
use Doctrine\ORM\Tools\ToolEvents;
1917

20-
abstract class AbstractSchemaSubscriber implements EventSubscriber
18+
abstract class AbstractSchemaListener
2119
{
2220
abstract public function postGenerateSchema(GenerateSchemaEventArgs $event): void;
2321

24-
public function getSubscribedEvents(): array
25-
{
26-
if (!class_exists(ToolEvents::class)) {
27-
return [];
28-
}
29-
30-
return [
31-
ToolEvents::postGenerateSchema,
32-
];
33-
}
34-
3522
protected function getIsSameDatabaseChecker(Connection $connection): \Closure
3623
{
3724
return static function (\Closure $exec) use ($connection): bool {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bridge\Doctrine\SchemaListener;
13+
14+
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
15+
use Symfony\Component\Cache\Adapter\DoctrineDbalAdapter;
16+
17+
/**
18+
* Automatically adds the cache table needed for the DoctrineDbalAdapter of
19+
* the Cache component.
20+
*/
21+
class DoctrineDbalCacheAdapterSchemaListener extends AbstractSchemaListener
22+
{
23+
/**
24+
* @param iterable<mixed, DoctrineDbalAdapter> $dbalAdapters
25+
*/
26+
public function __construct(private iterable $dbalAdapters)
27+
{
28+
}
29+
30+
public function postGenerateSchema(GenerateSchemaEventArgs $event): void
31+
{
32+
$connection = $event->getEntityManager()->getConnection();
33+
34+
foreach ($this->dbalAdapters as $dbalAdapter) {
35+
$dbalAdapter->configureSchema($event->getSchema(), $connection, $this->getIsSameDatabaseChecker($connection));
36+
}
37+
}
38+
}

src/Symfony/Bridge/Doctrine/SchemaListener/DoctrineDbalCacheAdapterSchemaSubscriber.php

+14-17
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,30 @@
1111

1212
namespace Symfony\Bridge\Doctrine\SchemaListener;
1313

14-
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
14+
use Doctrine\Common\EventSubscriber;
15+
use Doctrine\ORM\Tools\ToolEvents;
1516
use Symfony\Component\Cache\Adapter\DoctrineDbalAdapter;
1617

18+
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'The "%s" class is deprecated. Use "%s" instead.', DoctrineDbalCacheAdapterSchemaSubscriber::class, DoctrineDbalCacheAdapterSchemaListener::class);
19+
1720
/**
1821
* Automatically adds the cache table needed for the DoctrineDbalAdapter of
1922
* the Cache component.
2023
*
2124
* @author Ryan Weaver <ryan@symfonycasts.com>
25+
*
26+
* @deprecated since Symfony 6.3, use {@link DoctrineDbalCacheAdapterSchemaListener} instead
2227
*/
23-
final class DoctrineDbalCacheAdapterSchemaSubscriber extends AbstractSchemaSubscriber
28+
final class DoctrineDbalCacheAdapterSchemaSubscriber extends DoctrineDbalCacheAdapterSchemaListener implements EventSubscriber
2429
{
25-
private $dbalAdapters;
26-
27-
/**
28-
* @param iterable<mixed, DoctrineDbalAdapter> $dbalAdapters
29-
*/
30-
public function __construct(iterable $dbalAdapters)
31-
{
32-
$this->dbalAdapters = $dbalAdapters;
33-
}
34-
35-
public function postGenerateSchema(GenerateSchemaEventArgs $event): void
30+
public function getSubscribedEvents(): array
3631
{
37-
$connection = $event->getEntityManager()->getConnection();
38-
39-
foreach ($this->dbalAdapters as $dbalAdapter) {
40-
$dbalAdapter->configureSchema($event->getSchema(), $connection, $this->getIsSameDatabaseChecker($connection));
32+
if (!class_exists(ToolEvents::class)) {
33+
return [];
4134
}
35+
36+
return [
37+
ToolEvents::postGenerateSchema,
38+
];
4239
}
4340
}

src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaSubscriber.php renamed to src/Symfony/Bridge/Doctrine/SchemaListener/LockStoreSchemaListener.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use Symfony\Component\Lock\PersistingStoreInterface;
1616
use Symfony\Component\Lock\Store\DoctrineDbalStore;
1717

18-
final class LockStoreSchemaSubscriber extends AbstractSchemaSubscriber
18+
final class LockStoreSchemaListener extends AbstractSchemaListener
1919
{
2020
/**
2121
* @param iterable<mixed, PersistingStoreInterface> $stores
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Bridge\Doctrine\SchemaListener;
13+
14+
use Doctrine\DBAL\Event\SchemaCreateTableEventArgs;
15+
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
16+
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransport;
17+
use Symfony\Component\Messenger\Transport\TransportInterface;
18+
19+
/**
20+
* Automatically adds any required database tables to the Doctrine Schema.
21+
*/
22+
class MessengerTransportDoctrineSchemaListener extends AbstractSchemaListener
23+
{
24+
private const PROCESSING_TABLE_FLAG = self::class.':processing';
25+
26+
/**
27+
* @param iterable<mixed, TransportInterface> $transports
28+
*/
29+
public function __construct(private iterable $transports)
30+
{
31+
}
32+
33+
public function postGenerateSchema(GenerateSchemaEventArgs $event): void
34+
{
35+
$connection = $event->getEntityManager()->getConnection();
36+
37+
foreach ($this->transports as $transport) {
38+
if (!$transport instanceof DoctrineTransport) {
39+
continue;
40+
}
41+
42+
$transport->configureSchema($event->getSchema(), $connection, $this->getIsSameDatabaseChecker($connection));
43+
}
44+
}
45+
46+
public function onSchemaCreateTable(SchemaCreateTableEventArgs $event): void
47+
{
48+
$table = $event->getTable();
49+
50+
// if this method triggers a nested create table below, allow Doctrine to work like normal
51+
if ($table->hasOption(self::PROCESSING_TABLE_FLAG)) {
52+
return;
53+
}
54+
55+
foreach ($this->transports as $transport) {
56+
if (!$transport instanceof DoctrineTransport) {
57+
continue;
58+
}
59+
60+
if (!$extraSql = $transport->getExtraSetupSqlForTable($table)) {
61+
continue;
62+
}
63+
64+
// avoid this same listener from creating a loop on this table
65+
$table->addOption(self::PROCESSING_TABLE_FLAG, true);
66+
$createTableSql = $event->getPlatform()->getCreateTableSQL($table);
67+
68+
/*
69+
* Add all the SQL needed to create the table and tell Doctrine
70+
* to "preventDefault" so that only our SQL is used. This is
71+
* the only way to inject some extra SQL.
72+
*/
73+
$event->addSql($createTableSql);
74+
foreach ($extraSql as $sql) {
75+
$event->addSql($sql);
76+
}
77+
$event->preventDefault();
78+
79+
return;
80+
}
81+
}
82+
}

src/Symfony/Bridge/Doctrine/SchemaListener/MessengerTransportDoctrineSchemaSubscriber.php

+11-67
Original file line numberDiff line numberDiff line change
@@ -11,84 +11,28 @@
1111

1212
namespace Symfony\Bridge\Doctrine\SchemaListener;
1313

14-
use Doctrine\DBAL\Event\SchemaCreateTableEventArgs;
14+
use Doctrine\Common\EventSubscriber;
1515
use Doctrine\DBAL\Events;
16-
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
17-
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransport;
18-
use Symfony\Component\Messenger\Transport\TransportInterface;
16+
use Doctrine\ORM\Tools\ToolEvents;
17+
18+
trigger_deprecation('symfony/doctrine-bridge', '6.3', 'The "%s" class is deprecated. Use "%s" instead.', MessengerTransportDoctrineSchemaSubscriber::class, MessengerTransportDoctrineSchemaListener::class);
1919

2020
/**
2121
* Automatically adds any required database tables to the Doctrine Schema.
2222
*
2323
* @author Ryan Weaver <ryan@symfonycasts.com>
24+
*
25+
* @deprecated since Symfony 6.3, use {@link MessengerTransportDoctrineSchemaListener} instead
2426
*/
25-
final class MessengerTransportDoctrineSchemaSubscriber extends AbstractSchemaSubscriber
27+
final class MessengerTransportDoctrineSchemaSubscriber extends MessengerTransportDoctrineSchemaListener implements EventSubscriber
2628
{
27-
private const PROCESSING_TABLE_FLAG = self::class.':processing';
28-
29-
private iterable $transports;
30-
31-
/**
32-
* @param iterable<mixed, TransportInterface> $transports
33-
*/
34-
public function __construct(iterable $transports)
35-
{
36-
$this->transports = $transports;
37-
}
38-
39-
public function postGenerateSchema(GenerateSchemaEventArgs $event): void
40-
{
41-
$connection = $event->getEntityManager()->getConnection();
42-
43-
foreach ($this->transports as $transport) {
44-
if (!$transport instanceof DoctrineTransport) {
45-
continue;
46-
}
47-
48-
$transport->configureSchema($event->getSchema(), $connection, $this->getIsSameDatabaseChecker($connection));
49-
}
50-
}
51-
52-
public function onSchemaCreateTable(SchemaCreateTableEventArgs $event): void
29+
public function getSubscribedEvents(): array
5330
{
54-
$table = $event->getTable();
55-
56-
// if this method triggers a nested create table below, allow Doctrine to work like normal
57-
if ($table->hasOption(self::PROCESSING_TABLE_FLAG)) {
58-
return;
59-
}
60-
61-
foreach ($this->transports as $transport) {
62-
if (!$transport instanceof DoctrineTransport) {
63-
continue;
64-
}
65-
66-
if (!$extraSql = $transport->getExtraSetupSqlForTable($table)) {
67-
continue;
68-
}
31+
$subscribedEvents = [];
6932

70-
// avoid this same listener from creating a loop on this table
71-
$table->addOption(self::PROCESSING_TABLE_FLAG, true);
72-
$createTableSql = $event->getPlatform()->getCreateTableSQL($table);
73-
74-
/*
75-
* Add all the SQL needed to create the table and tell Doctrine
76-
* to "preventDefault" so that only our SQL is used. This is
77-
* the only way to inject some extra SQL.
78-
*/
79-
$event->addSql($createTableSql);
80-
foreach ($extraSql as $sql) {
81-
$event->addSql($sql);
82-
}
83-
$event->preventDefault();
84-
85-
return;
33+
if (class_exists(ToolEvents::class)) {
34+
$subscribedEvents[] = ToolEvents::postGenerateSchema;
8635
}
87-
}
88-
89-
public function getSubscribedEvents(): array
90-
{
91-
$subscribedEvents = parent::getSubscribedEvents();
9236

9337
if (class_exists(Events::class)) {
9438
$subscribedEvents[] = Events::onSchemaCreateTable;

src/Symfony/Bridge/Doctrine/SchemaListener/PdoSessionHandlerSchemaSubscriber.php renamed to src/Symfony/Bridge/Doctrine/SchemaListener/PdoSessionHandlerSchemaListener.php

+5-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
use Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs;
1515
use Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler;
1616

17-
final class PdoSessionHandlerSchemaSubscriber extends AbstractSchemaSubscriber
17+
final class PdoSessionHandlerSchemaListener extends AbstractSchemaListener
1818
{
1919
private PdoSessionHandler $sessionHandler;
2020

@@ -25,13 +25,12 @@ public function __construct(\SessionHandlerInterface $sessionHandler)
2525
}
2626
}
2727

28-
public function getSubscribedEvents(): array
29-
{
30-
return isset($this->sessionHandler) ? parent::getSubscribedEvents() : [];
31-
}
32-
3328
public function postGenerateSchema(GenerateSchemaEventArgs $event): void
3429
{
30+
if (!isset($this->sessionHandler)) {
31+
return;
32+
}
33+
3534
$connection = $event->getEntityManager()->getConnection();
3635

3736
$this->sessionHandler->configureSchema($event->getSchema(), $this->getIsSameDatabaseChecker($connection));

0 commit comments

Comments
 (0)
0