diff --git a/features/doctrine/eager_loading.feature b/features/doctrine/eager_loading.feature index 06ce1baf36f..27ab9804abe 100644 --- a/features/doctrine/eager_loading.feature +++ b/features/doctrine/eager_loading.feature @@ -11,11 +11,12 @@ Feature: Eager Loading Then the response status code should be 200 And the DQL should be equal to: """ - SELECT o, thirdLevel_a1, relatedToDummyFriend_a2, dummyFriend_a3 + SELECT o, thirdLevel_a1, fourthLevel_a2, relatedToDummyFriend_a3, dummyFriend_a4 FROM ApiPlatform\Tests\Fixtures\TestBundle\Entity\RelatedDummy o LEFT JOIN o.thirdLevel thirdLevel_a1 - LEFT JOIN o.relatedToDummyFriend relatedToDummyFriend_a2 - LEFT JOIN relatedToDummyFriend_a2.dummyFriend dummyFriend_a3 + LEFT JOIN thirdLevel_a1.fourthLevel fourthLevel_a2 + LEFT JOIN o.relatedToDummyFriend relatedToDummyFriend_a3 + LEFT JOIN relatedToDummyFriend_a3.dummyFriend dummyFriend_a4 WHERE o.id = :id_id """ @@ -45,11 +46,12 @@ Feature: Eager Loading Then the response status code should be 200 And the DQL should be equal to: """ - SELECT o, thirdLevel_a4, relatedToDummyFriend_a1, dummyFriend_a5 + SELECT o, thirdLevel_a4, fourthLevel_a5, relatedToDummyFriend_a1, dummyFriend_a6 FROM ApiPlatform\Tests\Fixtures\TestBundle\Entity\RelatedDummy o INNER JOIN o.relatedToDummyFriend relatedToDummyFriend_a1 LEFT JOIN o.thirdLevel thirdLevel_a4 - INNER JOIN relatedToDummyFriend_a1.dummyFriend dummyFriend_a5 + LEFT JOIN thirdLevel_a4.fourthLevel fourthLevel_a5 + INNER JOIN relatedToDummyFriend_a1.dummyFriend dummyFriend_a6 WHERE o IN( SELECT o_a2 FROM ApiPlatform\Tests\Fixtures\TestBundle\Entity\RelatedDummy o_a2 @@ -81,11 +83,12 @@ Feature: Eager Loading Then the response status code should be 200 And the DQL should be equal to: """ - SELECT o, thirdLevel_a3, relatedToDummyFriend_a4, dummyFriend_a5 + SELECT o, thirdLevel_a3, fourthLevel_a4, relatedToDummyFriend_a5, dummyFriend_a6 FROM ApiPlatform\Tests\Fixtures\TestBundle\Entity\RelatedDummy o LEFT JOIN o.thirdLevel thirdLevel_a3 - LEFT JOIN o.relatedToDummyFriend relatedToDummyFriend_a4 - LEFT JOIN relatedToDummyFriend_a4.dummyFriend dummyFriend_a5 + LEFT JOIN thirdLevel_a3.fourthLevel fourthLevel_a4 + LEFT JOIN o.relatedToDummyFriend relatedToDummyFriend_a5 + LEFT JOIN relatedToDummyFriend_a5.dummyFriend dummyFriend_a6 WHERE o.id IN ( SELECT related_dummy_a1.id FROM ApiPlatform\Tests\Fixtures\TestBundle\Entity\RelatedDummy related_dummy_a1 diff --git a/phpunit.xml.dist b/phpunit.xml.dist index ef2b974751d..d7be7ffe851 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -6,7 +6,7 @@ - + diff --git a/src/Core/Bridge/Doctrine/Common/Filter/BooleanFilterTrait.php b/src/Bridge/Doctrine/Common/Filter/BooleanFilterTrait.php similarity index 98% rename from src/Core/Bridge/Doctrine/Common/Filter/BooleanFilterTrait.php rename to src/Bridge/Doctrine/Common/Filter/BooleanFilterTrait.php index 4b4e56998a9..c58ddd38ec0 100644 --- a/src/Core/Bridge/Doctrine/Common/Filter/BooleanFilterTrait.php +++ b/src/Bridge/Doctrine/Common/Filter/BooleanFilterTrait.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\Bridge\Doctrine\Common\Filter; +namespace ApiPlatform\Bridge\Doctrine\Common\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\PropertyHelperTrait; use ApiPlatform\Exception\InvalidArgumentException; diff --git a/src/Core/Bridge/Doctrine/Common/Filter/DateFilterTrait.php b/src/Bridge/Doctrine/Common/Filter/DateFilterTrait.php similarity index 98% rename from src/Core/Bridge/Doctrine/Common/Filter/DateFilterTrait.php rename to src/Bridge/Doctrine/Common/Filter/DateFilterTrait.php index 22e7fd73544..7a3122bc452 100644 --- a/src/Core/Bridge/Doctrine/Common/Filter/DateFilterTrait.php +++ b/src/Bridge/Doctrine/Common/Filter/DateFilterTrait.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\Bridge\Doctrine\Common\Filter; +namespace ApiPlatform\Bridge\Doctrine\Common\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\PropertyHelperTrait; use ApiPlatform\Exception\InvalidArgumentException; diff --git a/src/Core/Bridge/Doctrine/Common/Filter/ExistsFilterTrait.php b/src/Bridge/Doctrine/Common/Filter/ExistsFilterTrait.php similarity index 98% rename from src/Core/Bridge/Doctrine/Common/Filter/ExistsFilterTrait.php rename to src/Bridge/Doctrine/Common/Filter/ExistsFilterTrait.php index eac7b82c6b8..a3a925936ed 100644 --- a/src/Core/Bridge/Doctrine/Common/Filter/ExistsFilterTrait.php +++ b/src/Bridge/Doctrine/Common/Filter/ExistsFilterTrait.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\Bridge\Doctrine\Common\Filter; +namespace ApiPlatform\Bridge\Doctrine\Common\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\PropertyHelperTrait; use ApiPlatform\Exception\InvalidArgumentException; diff --git a/src/Core/Bridge/Doctrine/Common/Filter/NumericFilterTrait.php b/src/Bridge/Doctrine/Common/Filter/NumericFilterTrait.php similarity index 98% rename from src/Core/Bridge/Doctrine/Common/Filter/NumericFilterTrait.php rename to src/Bridge/Doctrine/Common/Filter/NumericFilterTrait.php index af64eb8b1c0..3caaac69cda 100644 --- a/src/Core/Bridge/Doctrine/Common/Filter/NumericFilterTrait.php +++ b/src/Bridge/Doctrine/Common/Filter/NumericFilterTrait.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\Bridge\Doctrine\Common\Filter; +namespace ApiPlatform\Bridge\Doctrine\Common\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\PropertyHelperTrait; use ApiPlatform\Exception\InvalidArgumentException; diff --git a/src/Core/Bridge/Doctrine/Common/Filter/OrderFilterTrait.php b/src/Bridge/Doctrine/Common/Filter/OrderFilterTrait.php similarity index 97% rename from src/Core/Bridge/Doctrine/Common/Filter/OrderFilterTrait.php rename to src/Bridge/Doctrine/Common/Filter/OrderFilterTrait.php index 207f36e5e1c..6b92570428d 100644 --- a/src/Core/Bridge/Doctrine/Common/Filter/OrderFilterTrait.php +++ b/src/Bridge/Doctrine/Common/Filter/OrderFilterTrait.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\Bridge\Doctrine\Common\Filter; +namespace ApiPlatform\Bridge\Doctrine\Common\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\PropertyHelperTrait; diff --git a/src/Core/Bridge/Doctrine/Common/Filter/RangeFilterTrait.php b/src/Bridge/Doctrine/Common/Filter/RangeFilterTrait.php similarity index 98% rename from src/Core/Bridge/Doctrine/Common/Filter/RangeFilterTrait.php rename to src/Bridge/Doctrine/Common/Filter/RangeFilterTrait.php index d226cd21dbc..476691805fe 100644 --- a/src/Core/Bridge/Doctrine/Common/Filter/RangeFilterTrait.php +++ b/src/Bridge/Doctrine/Common/Filter/RangeFilterTrait.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\Bridge\Doctrine\Common\Filter; +namespace ApiPlatform\Bridge\Doctrine\Common\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\PropertyHelperTrait; use ApiPlatform\Exception\InvalidArgumentException; diff --git a/src/Core/Bridge/Doctrine/Common/Filter/SearchFilterTrait.php b/src/Bridge/Doctrine/Common/Filter/SearchFilterTrait.php similarity index 99% rename from src/Core/Bridge/Doctrine/Common/Filter/SearchFilterTrait.php rename to src/Bridge/Doctrine/Common/Filter/SearchFilterTrait.php index a2deec9a0fd..01b34bb2e3a 100644 --- a/src/Core/Bridge/Doctrine/Common/Filter/SearchFilterTrait.php +++ b/src/Bridge/Doctrine/Common/Filter/SearchFilterTrait.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\Bridge\Doctrine\Common\Filter; +namespace ApiPlatform\Bridge\Doctrine\Common\Filter; use ApiPlatform\Api\IriConverterInterface; use ApiPlatform\Core\Api\IriConverterInterface as LegacyIriConverterInterface; diff --git a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/BooleanFilter.php b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/BooleanFilter.php index 7b72bbfaec9..bdf0a66dd9d 100644 --- a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/BooleanFilter.php +++ b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/BooleanFilter.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Filter; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\BooleanFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\BooleanFilterTrait; use Doctrine\ODM\MongoDB\Aggregation\Builder; use Doctrine\ODM\MongoDB\Types\Type as MongoDbType; diff --git a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/DateFilter.php b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/DateFilter.php index 96208a0fe7c..e79499112a2 100644 --- a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/DateFilter.php +++ b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/DateFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\DateFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\DateFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\DateFilterTrait; use ApiPlatform\Exception\InvalidArgumentException; use Doctrine\ODM\MongoDB\Aggregation\Builder; use Doctrine\ODM\MongoDB\Types\Type as MongoDbType; diff --git a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/ExistsFilter.php b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/ExistsFilter.php index d3624f8dcfe..630a0b3d4e5 100644 --- a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/ExistsFilter.php +++ b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/ExistsFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\ExistsFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\ExistsFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\ExistsFilterTrait; use Doctrine\ODM\MongoDB\Aggregation\Builder; use Doctrine\ODM\MongoDB\Mapping\ClassMetadata; use Doctrine\Persistence\ManagerRegistry; diff --git a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/NumericFilter.php b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/NumericFilter.php index a8effa1c7de..ad2dd067fc8 100644 --- a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/NumericFilter.php +++ b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/NumericFilter.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Filter; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\NumericFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\NumericFilterTrait; use Doctrine\ODM\MongoDB\Aggregation\Builder; use Doctrine\ODM\MongoDB\Types\Type as MongoDbType; diff --git a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/OrderFilter.php b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/OrderFilter.php index 54b18a777f9..7fb2e65ee14 100644 --- a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/OrderFilter.php +++ b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/OrderFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\OrderFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\OrderFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\OrderFilterTrait; use Doctrine\ODM\MongoDB\Aggregation\Builder; use Doctrine\Persistence\ManagerRegistry; use Psr\Log\LoggerInterface; diff --git a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/RangeFilter.php b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/RangeFilter.php index 394bd284f79..4ea58058627 100644 --- a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/RangeFilter.php +++ b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/RangeFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\RangeFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\RangeFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\RangeFilterTrait; use Doctrine\ODM\MongoDB\Aggregation\Builder; /** diff --git a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/SearchFilter.php b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/SearchFilter.php index 0c3d36f5f03..54b6c8e95dc 100644 --- a/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/SearchFilter.php +++ b/src/Core/Bridge/Doctrine/MongoDbOdm/Filter/SearchFilter.php @@ -17,7 +17,7 @@ use ApiPlatform\Core\Api\IdentifiersExtractorInterface; use ApiPlatform\Core\Api\IriConverterInterface as LegacyIriConverterInterface; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\SearchFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\SearchFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\SearchFilterTrait; use ApiPlatform\Exception\InvalidArgumentException; use Doctrine\ODM\MongoDB\Aggregation\Builder; use Doctrine\ODM\MongoDB\Mapping\ClassMetadata as MongoDBClassMetadata; diff --git a/src/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtension.php b/src/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtension.php index 256e6a48dc1..749997fd1e2 100644 --- a/src/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtension.php +++ b/src/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtension.php @@ -28,8 +28,10 @@ use ApiPlatform\Exception\RuntimeException; use ApiPlatform\Metadata\ApiProperty; use ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface; +use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\ORM\Query\Expr\Join; +use Doctrine\ORM\Query\Expr\Select; use Doctrine\ORM\QueryBuilder; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface; @@ -169,7 +171,7 @@ private function apply(bool $collection, QueryBuilder $queryBuilder, QueryNameGe * * @throws RuntimeException when the max number of joins has been reached */ - private function joinRelations(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, bool $forceEager, bool $fetchPartial, string $parentAlias, array $options = [], array $normalizationContext = [], bool $wasLeftJoin = false, int &$joinCount = 0, int $currentDepth = null) + private function joinRelations(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, bool $forceEager, bool $fetchPartial, string $parentAlias, array $options = [], array $normalizationContext = [], bool $wasLeftJoin = false, int &$joinCount = 0, int $currentDepth = null, string $parentAssociation = null) { if ($joinCount > $this->maxJoins) { throw new RuntimeException('The total number of joined relations has exceeded the specified maximum. Raise the limit if necessary with the "api_platform.eager_loading.max_joins" configuration key (https://api-platform.com/docs/core/performance/#eager-loading), or limit the maximum serialization depth using the "enable_max_depth" option of the Symfony serializer (https://symfony.com/doc/current/components/serializer.html#handling-serialization-depth).'); @@ -229,8 +231,17 @@ private function joinRelations(QueryBuilder $queryBuilder, QueryNameGeneratorInt continue; } - $isNotReadableLink = false === $propertyMetadata->isReadableLink(); - if (null === $fetchEager && (false === $propertyMetadata->isReadable() || ((null === $inAttributes && $isNotReadableLink) || (false === $inAttributes)))) { + if (true !== $fetchEager && (false === $propertyMetadata->isReadable() || false === $inAttributes)) { + continue; + } + + // Avoid joining back to the parent that we just came from, but only on *ToOne relations + if ( + null !== $parentAssociation && + isset($mapping['inversedBy']) && + $mapping['inversedBy'] === $parentAssociation && + $mapping['type'] & ClassMetadata::TO_ONE + ) { continue; } @@ -256,16 +267,16 @@ private function joinRelations(QueryBuilder $queryBuilder, QueryNameGeneratorInt continue; } } else { - $queryBuilder->addSelect($associationAlias); + $this->addSelectOnce($queryBuilder, $associationAlias); } - // Avoid recursive joins + // Avoid recursive joins for self-referencing relations if ($mapping['targetEntity'] === $resourceClass) { - // Avoid joining the same association twice (see #1959) - if (!\in_array($associationAlias, $queryBuilder->getAllAliases(), true)) { - $queryBuilder->addSelect($associationAlias); - } + continue; + } + // Only join the relation's relations recursively if it's a readableLink + if (true !== $fetchEager && (true !== $propertyMetadata->isReadableLink())) { continue; } @@ -278,7 +289,7 @@ private function joinRelations(QueryBuilder $queryBuilder, QueryNameGeneratorInt } } - $this->joinRelations($queryBuilder, $queryNameGenerator, $mapping['targetEntity'], $forceEager, $fetchPartial, $associationAlias, $options, $childNormalizationContext, $isLeftJoin, $joinCount, $currentDepth); + $this->joinRelations($queryBuilder, $queryNameGenerator, $mapping['targetEntity'], $forceEager, $fetchPartial, $associationAlias, $options, $childNormalizationContext, $isLeftJoin, $joinCount, $currentDepth, $association); } } @@ -288,7 +299,7 @@ private function addSelect(QueryBuilder $queryBuilder, string $entity, string $a $entityManager = $queryBuilder->getEntityManager(); $targetClassMetadata = $entityManager->getClassMetadata($entity); if (!empty($targetClassMetadata->subClasses)) { - $queryBuilder->addSelect($associationAlias); + $this->addSelectOnce($queryBuilder, $associationAlias); return; } @@ -327,6 +338,17 @@ private function addSelect(QueryBuilder $queryBuilder, string $entity, string $a $queryBuilder->addSelect(sprintf('partial %s.{%s}', $associationAlias, implode(',', $select))); } + private function addSelectOnce(QueryBuilder $queryBuilder, string $alias) + { + $existingSelects = array_reduce($queryBuilder->getDQLPart('select') ?? [], function ($existing, $dqlSelect) { + return ($dqlSelect instanceof Select) ? array_merge($existing, $dqlSelect->getParts()) : $existing; + }, []); + + if (!\in_array($alias, $existingSelects, true)) { + $queryBuilder->addSelect($alias); + } + } + /** * Gets the serializer context. * diff --git a/src/Core/Bridge/Doctrine/Orm/Filter/BooleanFilter.php b/src/Core/Bridge/Doctrine/Orm/Filter/BooleanFilter.php index 5db1c4b63c6..037711807a9 100644 --- a/src/Core/Bridge/Doctrine/Orm/Filter/BooleanFilter.php +++ b/src/Core/Bridge/Doctrine/Orm/Filter/BooleanFilter.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\Orm\Filter; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\BooleanFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\BooleanFilterTrait; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\QueryBuilder; diff --git a/src/Core/Bridge/Doctrine/Orm/Filter/DateFilter.php b/src/Core/Bridge/Doctrine/Orm/Filter/DateFilter.php index acd29b1f3bb..40591bc8536 100644 --- a/src/Core/Bridge/Doctrine/Orm/Filter/DateFilter.php +++ b/src/Core/Bridge/Doctrine/Orm/Filter/DateFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\Orm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\DateFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\DateFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\DateFilterTrait; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use ApiPlatform\Exception\InvalidArgumentException; use Doctrine\DBAL\Types\Type as DBALType; diff --git a/src/Core/Bridge/Doctrine/Orm/Filter/ExistsFilter.php b/src/Core/Bridge/Doctrine/Orm/Filter/ExistsFilter.php index 24f86d31a35..119713f469c 100644 --- a/src/Core/Bridge/Doctrine/Orm/Filter/ExistsFilter.php +++ b/src/Core/Bridge/Doctrine/Orm/Filter/ExistsFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\Orm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\ExistsFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\ExistsFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\ExistsFilterTrait; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryBuilderHelper; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\ORM\Mapping\ClassMetadataInfo; diff --git a/src/Core/Bridge/Doctrine/Orm/Filter/NumericFilter.php b/src/Core/Bridge/Doctrine/Orm/Filter/NumericFilter.php index 41461cff7a0..145915daf09 100644 --- a/src/Core/Bridge/Doctrine/Orm/Filter/NumericFilter.php +++ b/src/Core/Bridge/Doctrine/Orm/Filter/NumericFilter.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\Orm\Filter; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\NumericFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\NumericFilterTrait; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\QueryBuilder; diff --git a/src/Core/Bridge/Doctrine/Orm/Filter/OrderFilter.php b/src/Core/Bridge/Doctrine/Orm/Filter/OrderFilter.php index cde61b93368..560f2ab1bb6 100644 --- a/src/Core/Bridge/Doctrine/Orm/Filter/OrderFilter.php +++ b/src/Core/Bridge/Doctrine/Orm/Filter/OrderFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\Orm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\OrderFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\OrderFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\OrderFilterTrait; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; diff --git a/src/Core/Bridge/Doctrine/Orm/Filter/RangeFilter.php b/src/Core/Bridge/Doctrine/Orm/Filter/RangeFilter.php index ead733e20e2..db744cd6254 100644 --- a/src/Core/Bridge/Doctrine/Orm/Filter/RangeFilter.php +++ b/src/Core/Bridge/Doctrine/Orm/Filter/RangeFilter.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Core\Bridge\Doctrine\Orm\Filter; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\RangeFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\RangeFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\RangeFilterTrait; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use Doctrine\ORM\QueryBuilder; diff --git a/src/Core/Bridge/Doctrine/Orm/Filter/SearchFilter.php b/src/Core/Bridge/Doctrine/Orm/Filter/SearchFilter.php index 8c1f9093ea0..d615fba789c 100644 --- a/src/Core/Bridge/Doctrine/Orm/Filter/SearchFilter.php +++ b/src/Core/Bridge/Doctrine/Orm/Filter/SearchFilter.php @@ -17,7 +17,7 @@ use ApiPlatform\Core\Api\IdentifiersExtractorInterface; use ApiPlatform\Core\Api\IriConverterInterface as LegacyIriConverterInterface; use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\SearchFilterInterface; -use ApiPlatform\Core\Bridge\Doctrine\Common\Filter\SearchFilterTrait; +use ApiPlatform\Bridge\Doctrine\Common\Filter\SearchFilterTrait; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryBuilderHelper; use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface; use ApiPlatform\Exception\InvalidArgumentException; diff --git a/src/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php b/src/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php index 743d9d96fcd..0f7d4d22c5b 100644 --- a/src/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php +++ b/src/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php @@ -31,8 +31,8 @@ use ApiPlatform\Core\DataProvider\CollectionDataProviderInterface; use ApiPlatform\Core\DataProvider\ItemDataProviderInterface; use ApiPlatform\Core\DataProvider\SubresourceDataProviderInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInitializerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Metadata\Extractor\XmlExtractor; use ApiPlatform\Core\Metadata\Extractor\YamlExtractor; use ApiPlatform\GraphQl\Error\ErrorHandlerInterface; diff --git a/src/Core/Bridge/Symfony/Messenger/DataTransformer.php b/src/Core/Bridge/Symfony/Messenger/DataTransformer.php index 5a63870d328..7cb75124648 100644 --- a/src/Core/Bridge/Symfony/Messenger/DataTransformer.php +++ b/src/Core/Bridge/Symfony/Messenger/DataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Core\Bridge\Symfony\Messenger; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface; use ApiPlatform\Core\Util\ClassInfoTrait; use ApiPlatform\Exception\OperationNotFoundException; diff --git a/src/Core/Serializer/AbstractItemNormalizer.php b/src/Core/Serializer/AbstractItemNormalizer.php index af2a6d54f03..ef598513e08 100644 --- a/src/Core/Serializer/AbstractItemNormalizer.php +++ b/src/Core/Serializer/AbstractItemNormalizer.php @@ -17,8 +17,8 @@ use ApiPlatform\Api\UrlGeneratorInterface; use ApiPlatform\Core\Api\IriConverterInterface as LegacyIriConverterInterface; use ApiPlatform\Core\DataProvider\ItemDataProviderInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInitializerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface as LegacyPropertyMetadataFactoryInterface; use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface as LegacyPropertyNameCollectionFactoryInterface; use ApiPlatform\Core\Metadata\Property\PropertyMetadata; diff --git a/src/Core/DataTransformer/DataTransformerInitializerInterface.php b/src/DataTransformer/DataTransformerInitializerInterface.php similarity index 93% rename from src/Core/DataTransformer/DataTransformerInitializerInterface.php rename to src/DataTransformer/DataTransformerInitializerInterface.php index 85007c818e1..dde47366ce5 100644 --- a/src/Core/DataTransformer/DataTransformerInitializerInterface.php +++ b/src/DataTransformer/DataTransformerInitializerInterface.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\DataTransformer; +namespace ApiPlatform\DataTransformer; interface DataTransformerInitializerInterface extends DataTransformerInterface { diff --git a/src/Core/DataTransformer/DataTransformerInterface.php b/src/DataTransformer/DataTransformerInterface.php similarity index 95% rename from src/Core/DataTransformer/DataTransformerInterface.php rename to src/DataTransformer/DataTransformerInterface.php index 156c0ffe437..56abe3fb5c5 100644 --- a/src/Core/DataTransformer/DataTransformerInterface.php +++ b/src/DataTransformer/DataTransformerInterface.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace ApiPlatform\Core\DataTransformer; +namespace ApiPlatform\DataTransformer; /** * Transforms a DTO or an Anonymous class to a Resource object. diff --git a/src/deprecated_interfaces.php b/src/deprecated_interfaces.php new file mode 100644 index 00000000000..a97d5c264e8 --- /dev/null +++ b/src/deprecated_interfaces.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +return [ + ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface::class => ApiPlatform\DataTransformer\DataTransformerInitializerInterface::class, + ApiPlatform\Core\DataTransformer\DataTransformerInterface::class => ApiPlatform\DataTransformer\DataTransformerInterface::class, +]; diff --git a/src/deprecation.php b/src/deprecation.php index a83c374a739..d2ebd166c46 100644 --- a/src/deprecation.php +++ b/src/deprecation.php @@ -106,8 +106,19 @@ ApiPlatform\Core\GraphQl\Type\Definition\UploadType::class => ApiPlatform\GraphQl\Type\Definition\UploadType::class, ApiPlatform\Core\GraphQl\Type\Definition\IterableType::class => ApiPlatform\GraphQl\Type\Definition\IterableType::class, ApiPlatform\Core\GraphQl\Type\TypesContainer::class => ApiPlatform\GraphQl\Type\TypesContainer::class, + + // Bridge + ApiPlatform\Core\Bridge\Doctrine\Common\Filter\BooleanFilterTrait::class => ApiPlatform\Bridge\Doctrine\Common\Filter\BooleanFilterTrait::class, + ApiPlatform\Core\Bridge\Doctrine\Common\Filter\DateFilterTrait::class => ApiPlatform\Bridge\Doctrine\Common\Filter\DateFilterTrait::class, + ApiPlatform\Core\Bridge\Doctrine\Common\Filter\ExistsFilterTrait::class => ApiPlatform\Bridge\Doctrine\Common\Filter\ExistsFilterTrait::class, + ApiPlatform\Core\Bridge\Doctrine\Common\Filter\NumericFilterTrait::class => ApiPlatform\Bridge\Doctrine\Common\Filter\NumericFilterTrait::class, + ApiPlatform\Core\Bridge\Doctrine\Common\Filter\OrderFilterTrait::class => ApiPlatform\Bridge\Doctrine\Common\Filter\OrderFilterTrait::class, + ApiPlatform\Core\Bridge\Doctrine\Common\Filter\RangeFilterTrait::class => ApiPlatform\Bridge\Doctrine\Common\Filter\RangeFilterTrait::class, + ApiPlatform\Core\Bridge\Doctrine\Common\Filter\SearchFilterTrait::class => ApiPlatform\Bridge\Doctrine\Common\Filter\SearchFilterTrait::class, ]; + $deprecatedInterfaces = include 'deprecated_interfaces.php'; + if (ApiPlatform\Core\Metadata\Property\PropertyMetadata::class === $className) { trigger_deprecation('api-platform/core', '2.7', sprintf('The class %s is deprecated, use %s instead.', $className, ApiPlatform\Metadata\ApiProperty::class)); } @@ -126,4 +137,11 @@ class_alias($deprecatedClasses[$className], $className); return; } + + if (isset($deprecatedInterfaces[$className])) { + class_alias($deprecatedInterfaces[$className], $className); + trigger_deprecation('api-platform/core', '2.7', sprintf('The interface %s is deprecated, use %s instead.', $className, $deprecatedClasses[$className])); + + return; + } }); diff --git a/tests/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php b/tests/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php index d6d9dfa152f..4326c63ab34 100644 --- a/tests/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php +++ b/tests/Core/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php @@ -236,6 +236,7 @@ public function testApplyToItem() $queryBuilderProphecy->addSelect('partial relatedDummy4_a5.{id}')->shouldBeCalledTimes(1); $queryBuilderProphecy->addSelect('singleInheritanceRelation_a6')->shouldBeCalledTimes(1); $queryBuilderProphecy->getDQLPart('join')->willReturn([]); + $queryBuilderProphecy->getDQLPart('select')->willReturn([]); $queryBuilder = $queryBuilderProphecy->reveal(); $orderExtensionTest = new EagerLoadingExtension($propertyNameCollectionFactoryProphecy->reveal(), $propertyMetadataFactoryProphecy->reveal(), $resourceMetadataFactoryProphecy->reveal(), 30, false, null, null, true); @@ -895,6 +896,7 @@ public function testApplyToCollectionNoPartial() $queryBuilderProphecy->addSelect('relatedDummy_a1')->shouldBeCalledTimes(1); $queryBuilderProphecy->addSelect('relatedDummy2_a2')->shouldBeCalledTimes(1); $queryBuilderProphecy->getDQLPart('join')->willReturn([]); + $queryBuilderProphecy->getDQLPart('select')->willReturn([]); $queryBuilder = $queryBuilderProphecy->reveal(); $eagerExtensionTest = new EagerLoadingExtension($propertyNameCollectionFactoryProphecy->reveal(), $propertyMetadataFactoryProphecy->reveal(), $resourceMetadataFactoryProphecy->reveal(), 30); @@ -960,6 +962,7 @@ private function doTestApplyToCollectionWithANonReadableButFetchEagerProperty(bo $queryBuilderProphecy->addSelect('relatedDummy_a1')->shouldBeCalledTimes(1); $queryBuilderProphecy->addSelect('relatedDummy2_a2')->shouldBeCalledTimes(1); $queryBuilderProphecy->getDQLPart('join')->willReturn([]); + $queryBuilderProphecy->getDQLPart('select')->willReturn([]); $queryBuilder = $queryBuilderProphecy->reveal(); $eagerExtensionTest = new EagerLoadingExtension($propertyNameCollectionFactoryProphecy->reveal(), $propertyMetadataFactoryProphecy->reveal(), $resourceMetadataFactoryProphecy->reveal(), 30); @@ -1004,6 +1007,7 @@ public function testApplyToCollectionWithExistingJoin(string $joinType): void new Join($joinType, 'o.relatedDummy', 'existing_join_alias'), ], ]); + $queryBuilderProphecy->getDQLPart('select')->willReturn([]); $queryBuilderProphecy->addSelect('existing_join_alias')->shouldBeCalledTimes(1); $queryBuilder = $queryBuilderProphecy->reveal(); diff --git a/tests/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php b/tests/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php index bd5cf4ac1e7..b9aa7825ca3 100644 --- a/tests/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php +++ b/tests/Core/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php @@ -65,8 +65,8 @@ use ApiPlatform\Core\DataProvider\Pagination; use ApiPlatform\Core\DataProvider\PaginationOptions; use ApiPlatform\Core\DataProvider\SubresourceDataProviderInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInitializerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\JsonSchema\SchemaFactoryInterface; use ApiPlatform\Core\JsonSchema\TypeFactoryInterface; use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface as LegacyPropertyMetadataFactoryInterface; diff --git a/tests/Core/Serializer/AbstractItemNormalizerTest.php b/tests/Core/Serializer/AbstractItemNormalizerTest.php index 2db10e51cc0..0a7c5c00095 100644 --- a/tests/Core/Serializer/AbstractItemNormalizerTest.php +++ b/tests/Core/Serializer/AbstractItemNormalizerTest.php @@ -16,8 +16,8 @@ use ApiPlatform\Core\Api\IriConverterInterface; use ApiPlatform\Core\Api\ResourceClassResolverInterface; use ApiPlatform\Core\DataProvider\ItemDataProviderInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInitializerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface; use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface; use ApiPlatform\Core\Metadata\Property\PropertyMetadata; diff --git a/tests/Core/Serializer/ItemNormalizerTest.php b/tests/Core/Serializer/ItemNormalizerTest.php index ede88e6cb16..8235a8da104 100644 --- a/tests/Core/Serializer/ItemNormalizerTest.php +++ b/tests/Core/Serializer/ItemNormalizerTest.php @@ -15,7 +15,7 @@ use ApiPlatform\Core\Api\IriConverterInterface; use ApiPlatform\Core\Api\ResourceClassResolverInterface; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Metadata\Property\Factory\PropertyMetadataFactoryInterface; use ApiPlatform\Core\Metadata\Property\Factory\PropertyNameCollectionFactoryInterface; use ApiPlatform\Core\Metadata\Property\PropertyNameCollection; diff --git a/tests/Fixtures/TestBundle/DataTransformer/CustomInputDtoDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/CustomInputDtoDataTransformer.php index a7a5db0212a..8b4c5b0da5b 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/CustomInputDtoDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/CustomInputDtoDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Serializer\AbstractItemNormalizer; use ApiPlatform\Tests\Fixtures\TestBundle\Document\DummyDtoCustom as DummyDtoCustomDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\CustomInputDto; diff --git a/tests/Fixtures/TestBundle/DataTransformer/CustomOutputDtoDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/CustomOutputDtoDataTransformer.php index 0e3586e10bf..a7b5e5847aa 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/CustomOutputDtoDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/CustomOutputDtoDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Tests\Fixtures\TestBundle\Document\DummyDtoCustom as DummyDtoCustomDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\CustomOutputDto; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\DummyDtoCustom; diff --git a/tests/Fixtures/TestBundle/DataTransformer/DummyDtoNoInputToOutputDtoDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/DummyDtoNoInputToOutputDtoDataTransformer.php index e9eb4cb7d2e..73a7b67114f 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/DummyDtoNoInputToOutputDtoDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/DummyDtoNoInputToOutputDtoDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Tests\Fixtures\TestBundle\Document\DummyDtoNoInput as DummyDtoNoInputDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\Document\OutputDto as OutputDtoDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\OutputDto; diff --git a/tests/Fixtures/TestBundle/DataTransformer/InitializeInputDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/InitializeInputDataTransformer.php index 95e2c2d19a7..71cdd2d54cc 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/InitializeInputDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/InitializeInputDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface; +use ApiPlatform\DataTransformer\DataTransformerInitializerInterface; use ApiPlatform\Core\Serializer\AbstractItemNormalizer; use ApiPlatform\Tests\Fixtures\TestBundle\Document\InitializeInput as InitializeInputDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\InitializeInputDto; diff --git a/tests/Fixtures/TestBundle/DataTransformer/InputDtoDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/InputDtoDataTransformer.php index 282e9199a8e..060a27b6a1b 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/InputDtoDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/InputDtoDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Serializer\AbstractItemNormalizer; use ApiPlatform\Tests\Fixtures\TestBundle\Document\DummyDtoInputOutput as DummyDtoInputOutputDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\Document\InputDto as InputDtoDocument; diff --git a/tests/Fixtures/TestBundle/DataTransformer/OutputDtoDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/OutputDtoDataTransformer.php index 7c297434024..7630c211bb6 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/OutputDtoDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/OutputDtoDataTransformer.php @@ -14,7 +14,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; use ApiPlatform\Core\DataProvider\ArrayPaginator; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Tests\Fixtures\TestBundle\Document\DummyDtoInputOutput as DummyDtoInputOutputDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\Document\OutputDto as OutputDtoDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\OutputDto; diff --git a/tests/Fixtures/TestBundle/DataTransformer/OutputDtoSameClassTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/OutputDtoSameClassTransformer.php index f8a776016c1..0a3e11596d1 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/OutputDtoSameClassTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/OutputDtoSameClassTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Tests\Fixtures\TestBundle\Document\DummyDtoOutputFallbackToSameClass as DummyDtoOutputFallbackToSameClassDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Document\DummyDtoOutputSameClass as DummyDtoOutputSameClassDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\OutputDtoDummy; diff --git a/tests/Fixtures/TestBundle/DataTransformer/RPCOutputDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/RPCOutputDataTransformer.php index 24d6bc442c0..e5f5a80808c 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/RPCOutputDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/RPCOutputDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Tests\Fixtures\TestBundle\Document\RPC as RPCDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\RPCOutput; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\RPC; diff --git a/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordInputDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordInputDataTransformer.php index d9c0581d18f..c53c99c4234 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordInputDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordInputDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Core\Serializer\AbstractItemNormalizer; use ApiPlatform\Tests\Fixtures\TestBundle\Document\User as UserDocument; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\RecoverPasswordInput; diff --git a/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordOutputDataTransformer.php b/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordOutputDataTransformer.php index 5a19c76b525..e62154d8f3f 100644 --- a/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordOutputDataTransformer.php +++ b/tests/Fixtures/TestBundle/DataTransformer/RecoverPasswordOutputDataTransformer.php @@ -13,7 +13,7 @@ namespace ApiPlatform\Tests\Fixtures\TestBundle\DataTransformer; -use ApiPlatform\Core\DataTransformer\DataTransformerInterface; +use ApiPlatform\DataTransformer\DataTransformerInterface; use ApiPlatform\Tests\Fixtures\TestBundle\Dto\RecoverPasswordOutput; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Dummy; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\User;