From 1812aafe0657e0ebcd22174f19110a0e1411e2e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Wed, 13 Nov 2024 20:59:55 +0100 Subject: [PATCH] Dynamically fix compatibility with doctrine/data-fixtures v2 Classes that extend ContainerAwareLoader have to also extend Loader, meaning this is no breaking change because it can be argued that the incompatibility of the extending class would be with the Loader interface. --- composer.json | 2 +- .../DataFixtures/AddFixtureImplementation.php | 35 +++++++++++++++++++ .../DataFixtures/ContainerAwareLoader.php | 7 ++-- src/Symfony/Bridge/Doctrine/composer.json | 2 +- 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 src/Symfony/Bridge/Doctrine/DataFixtures/AddFixtureImplementation.php diff --git a/composer.json b/composer.json index df4624cd25612..d8f7f96b1b7f1 100644 --- a/composer.json +++ b/composer.json @@ -127,7 +127,7 @@ "doctrine/annotations": "^1.13.1|^2", "doctrine/cache": "^1.11|^2.0", "doctrine/collections": "^1.0|^2.0", - "doctrine/data-fixtures": "^1.1", + "doctrine/data-fixtures": "^1.1|^2", "doctrine/dbal": "^2.13.1|^3.0", "doctrine/orm": "^2.7.4", "guzzlehttp/promises": "^1.4|^2.0", diff --git a/src/Symfony/Bridge/Doctrine/DataFixtures/AddFixtureImplementation.php b/src/Symfony/Bridge/Doctrine/DataFixtures/AddFixtureImplementation.php new file mode 100644 index 0000000000000..e85396cd18f62 --- /dev/null +++ b/src/Symfony/Bridge/Doctrine/DataFixtures/AddFixtureImplementation.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bridge\Doctrine\DataFixtures; + +use Doctrine\Common\DataFixtures\FixtureInterface; +use Doctrine\Common\DataFixtures\ReferenceRepository; + +if (method_exists(ReferenceRepository::class, 'getReferences')) { + /** @internal */ + trait AddFixtureImplementation + { + public function addFixture(FixtureInterface $fixture) + { + $this->doAddFixture($fixture); + } + } +} else { + /** @internal */ + trait AddFixtureImplementation + { + public function addFixture(FixtureInterface $fixture): void + { + $this->doAddFixture($fixture); + } + } +} diff --git a/src/Symfony/Bridge/Doctrine/DataFixtures/ContainerAwareLoader.php b/src/Symfony/Bridge/Doctrine/DataFixtures/ContainerAwareLoader.php index 7ccd1df106f70..76488655e6aae 100644 --- a/src/Symfony/Bridge/Doctrine/DataFixtures/ContainerAwareLoader.php +++ b/src/Symfony/Bridge/Doctrine/DataFixtures/ContainerAwareLoader.php @@ -25,6 +25,8 @@ */ class ContainerAwareLoader extends Loader { + use AddFixtureImplementation; + private $container; public function __construct(ContainerInterface $container) @@ -32,10 +34,7 @@ public function __construct(ContainerInterface $container) $this->container = $container; } - /** - * {@inheritdoc} - */ - public function addFixture(FixtureInterface $fixture) + private function doAddFixture(FixtureInterface $fixture): void { if ($fixture instanceof ContainerAwareInterface) { $fixture->setContainer($this->container); diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json index 6d90870c7af55..36d5e58b015d3 100644 --- a/src/Symfony/Bridge/Doctrine/composer.json +++ b/src/Symfony/Bridge/Doctrine/composer.json @@ -45,7 +45,7 @@ "symfony/var-dumper": "^4.4|^5.0|^6.0", "doctrine/annotations": "^1.10.4|^2", "doctrine/collections": "^1.0|^2.0", - "doctrine/data-fixtures": "^1.1", + "doctrine/data-fixtures": "^1.1|^2", "doctrine/dbal": "^2.13.1|^3|^4", "doctrine/orm": "^2.7.4|^3", "psr/log": "^1|^2|^3"