From 440617413cf60cb4ab9acb6f8ac24602b37d9953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Tue, 19 Nov 2019 07:44:33 +0100 Subject: [PATCH 1/4] Remove http_cache.invalidation deprecation and fix some remaining deprec --- .../DependencyInjection/Configuration.php | 1 - tests/Fixtures/app/config/config_common.yml | 24 +++++++++---------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Bridge/Symfony/Bundle/DependencyInjection/Configuration.php b/src/Bridge/Symfony/Bundle/DependencyInjection/Configuration.php index 237318caa33..1373719287a 100644 --- a/src/Bridge/Symfony/Bundle/DependencyInjection/Configuration.php +++ b/src/Bridge/Symfony/Bundle/DependencyInjection/Configuration.php @@ -366,7 +366,6 @@ private function addHttpCacheSection(ArrayNodeDefinition $rootNode): void ->end() ->booleanNode('public')->defaultNull()->info('To make all responses public by default.')->end() ->arrayNode('invalidation') - ->setDeprecated('The use of the `http_cache.invalidation` has been deprecated in 2.6 and will be removed in 3.0. Use `defaults.cache_headers.invalidation` instead.') ->info('Enable the tags-based cache invalidation system.') ->canBeEnabled() ->children() diff --git a/tests/Fixtures/app/config/config_common.yml b/tests/Fixtures/app/config/config_common.yml index 94c452a69bf..ff7381f0521 100644 --- a/tests/Fixtures/app/config/config_common.yml +++ b/tests/Fixtures/app/config/config_common.yml @@ -58,14 +58,6 @@ api_platform: nesting_separator: __ name_converter: 'app.name_converter' enable_fos_user: true - collection: - order_parameter_name: 'order' - order: 'ASC' - pagination: - client_enabled: true - client_items_per_page: true - client_partial: true - items_per_page: 3 exception_to_status: Symfony\Component\Serializer\Exception\ExceptionInterface: !php/const Symfony\Component\HttpFoundation\Response::HTTP_BAD_REQUEST ApiPlatform\Core\Exception\InvalidArgumentException: !php/const Symfony\Component\HttpFoundation\Response::HTTP_BAD_REQUEST @@ -73,10 +65,18 @@ api_platform: http_cache: invalidation: enabled: true - max_age: 60 - shared_max_age: 3600 - vary: ['Accept', 'Cookie'] - public: true + defaults: + pagination_client_enabled: true + pagination_client_items_per_page: true + pagination_client_partial: true + pagination_items_per_page: 3 + order_parameter_name: 'order' + order: 'ASC' + cache_headers: + max_age: 60 + shared_max_age: 3600 + vary: ['Accept', 'Cookie'] + public: true parameters: container.autowiring.strict_mode: true From 690c28cec01aa8dc361946dce19137208b35b10b Mon Sep 17 00:00:00 2001 From: soyuka Date: Sun, 29 Mar 2020 23:31:26 +0200 Subject: [PATCH 2/4] Fix pagination options with defaults --- .../ApiPlatformExtension.php | 54 ++++++++++++------- tests/Fixtures/app/config/config_common.yml | 17 +++--- .../AnnotationResourceMetadataFactoryTest.php | 2 + 3 files changed, 46 insertions(+), 27 deletions(-) diff --git a/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php b/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php index d7c7d5d53fd..5cc4f107ce6 100644 --- a/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php +++ b/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php @@ -169,24 +169,24 @@ private function registerCommonConfiguration(ContainerBuilder $container, array $container->setParameter('api_platform.collection.exists_parameter_name', $config['collection']['exists_parameter_name']); $container->setParameter('api_platform.collection.order', $config['collection']['order']); $container->setParameter('api_platform.collection.order_parameter_name', $config['collection']['order_parameter_name']); - $container->setParameter('api_platform.collection.pagination.enabled', $this->isConfigEnabled($container, $config['collection']['pagination'])); - $container->setParameter('api_platform.collection.pagination.partial', $config['collection']['pagination']['partial']); - $container->setParameter('api_platform.collection.pagination.client_enabled', $config['collection']['pagination']['client_enabled']); - $container->setParameter('api_platform.collection.pagination.client_items_per_page', $config['collection']['pagination']['client_items_per_page']); - $container->setParameter('api_platform.collection.pagination.client_partial', $config['collection']['pagination']['client_partial']); - $container->setParameter('api_platform.collection.pagination.items_per_page', $config['collection']['pagination']['items_per_page']); - $container->setParameter('api_platform.collection.pagination.maximum_items_per_page', $config['collection']['pagination']['maximum_items_per_page']); - $container->setParameter('api_platform.collection.pagination.page_parameter_name', $config['collection']['pagination']['page_parameter_name']); - $container->setParameter('api_platform.collection.pagination.enabled_parameter_name', $config['collection']['pagination']['enabled_parameter_name']); - $container->setParameter('api_platform.collection.pagination.items_per_page_parameter_name', $config['collection']['pagination']['items_per_page_parameter_name']); - $container->setParameter('api_platform.collection.pagination.partial_parameter_name', $config['collection']['pagination']['partial_parameter_name']); - $container->setParameter('api_platform.collection.pagination', $config['collection']['pagination']); - $container->setParameter('api_platform.http_cache.etag', $config['http_cache']['etag']); - $container->setParameter('api_platform.http_cache.max_age', $config['http_cache']['max_age']); - $container->setParameter('api_platform.http_cache.shared_max_age', $config['http_cache']['shared_max_age']); - $container->setParameter('api_platform.http_cache.vary', $config['http_cache']['vary']); - $container->setParameter('api_platform.http_cache.public', $config['http_cache']['public']); - $container->setParameter('api_platform.http_cache.invalidation.max_header_length', $config['http_cache']['invalidation']['max_header_length']); + $container->setParameter('api_platform.collection.pagination.enabled', $this->isConfigEnabled($container, $config['defaults']['pagination_enabled'] ?? $config['collection']['pagination'])); + $container->setParameter('api_platform.collection.pagination.partial', $config['defaults']['pagination_partial'] ?? $config['collection']['pagination']['partial']); + $container->setParameter('api_platform.collection.pagination.client_enabled', $config['defaults']['pagination_client_enabled'] ?? $config['collection']['pagination']['client_enabled']); + $container->setParameter('api_platform.collection.pagination.client_items_per_page', $config['defaults']['pagination_client_items_per_page'] ?? $config['collection']['pagination']['client_items_per_page']); + $container->setParameter('api_platform.collection.pagination.client_partial', $config['defaults']['pagination_client_partial'] ?? $config['collection']['pagination']['client_partial']); + $container->setParameter('api_platform.collection.pagination.items_per_page', $config['defaults']['pagination_items_per_page'] ?? $config['collection']['pagination']['items_per_page']); + $container->setParameter('api_platform.collection.pagination.maximum_items_per_page', $config['defaults']['pagination_maximum_items_per_page'] ?? $config['collection']['pagination']['maximum_items_per_page']); + $container->setParameter('api_platform.collection.pagination.page_parameter_name', $config['defaults']['pagination_page_parameter_name'] ?? $config['collection']['pagination']['page_parameter_name']); + $container->setParameter('api_platform.collection.pagination.enabled_parameter_name', $config['defaults']['pagination_enabled_parameter_name'] ?? $config['collection']['pagination']['enabled_parameter_name']); + $container->setParameter('api_platform.collection.pagination.items_per_page_parameter_name', $config['defaults']['pagination_items_per_page_parameter_name'] ?? $config['collection']['pagination']['items_per_page_parameter_name']); + $container->setParameter('api_platform.collection.pagination.partial_parameter_name', $config['defaults']['pagination_partial_parameter_name'] ?? $config['collection']['pagination']['partial_parameter_name']); + $container->setParameter('api_platform.collection.pagination', $this->getPaginationDefaults($config['defaults'], $config['collection']['pagination'])); + $container->setParameter('api_platform.http_cache.etag', $config['defaults']['cache_headers']['etag'] ?? $config['http_cache']['etag']); + $container->setParameter('api_platform.http_cache.max_age', $config['defaults']['cache_headers']['max_age'] ?? $config['http_cache']['max_age']); + $container->setParameter('api_platform.http_cache.shared_max_age', $config['defaults']['cache_headers']['shared_max_age'] ?? $config['http_cache']['shared_max_age']); + $container->setParameter('api_platform.http_cache.vary', $config['defaults']['cache_headers']['vary'] ?? $config['http_cache']['vary']); + $container->setParameter('api_platform.http_cache.public', $config['defaults']['cache_headers']['public'] ?? $config['http_cache']['public']); + $container->setParameter('api_platform.http_cache.invalidation.max_header_length', $config['defaults']['cache_headers']['invalidation']['max_header_length'] ?? $config['http_cache']['invalidation']['max_header_length']); $container->setAlias('api_platform.operation_path_resolver.default', $config['default_operation_path_resolver']); $container->setAlias('api_platform.path_segment_name_generator', $config['path_segment_name_generator']); @@ -197,6 +197,24 @@ private function registerCommonConfiguration(ContainerBuilder $container, array $container->setParameter('api_platform.defaults', $this->normalizeDefaults($config['defaults'] ?? [])); } + /** + * This method will be removed in 3.0 when "defaults" will be the regular configuration path for the pagination. + */ + private function getPaginationDefaults(array $defaults, array $collectionPaginationConfiguration): array + { + $paginationOptions = []; + + foreach ($defaults as $key => $value) { + if (0 !== strpos($key, 'pagination_')) { + continue; + } + + $paginationOptions[str_replace('pagination_', '', $key)] = $value; + } + + return array_merge($collectionPaginationConfiguration, $paginationOptions); + } + private function normalizeDefaults(array $defaults): array { $normalizedDefaults = ['attributes' => []]; diff --git a/tests/Fixtures/app/config/config_common.yml b/tests/Fixtures/app/config/config_common.yml index ff7381f0521..caf23a48d8c 100644 --- a/tests/Fixtures/app/config/config_common.yml +++ b/tests/Fixtures/app/config/config_common.yml @@ -70,13 +70,12 @@ api_platform: pagination_client_items_per_page: true pagination_client_partial: true pagination_items_per_page: 3 - order_parameter_name: 'order' - order: 'ASC' + order: 'ASC' cache_headers: - max_age: 60 - shared_max_age: 3600 - vary: ['Accept', 'Cookie'] - public: true + max_age: 60 + shared_max_age: 3600 + vary: ['Accept', 'Cookie'] + public: true parameters: container.autowiring.strict_mode: true @@ -144,11 +143,11 @@ services: ApiPlatform\Core\Tests\Fixtures\TestBundle\Filter\RequiredAllowEmptyFilter: arguments: [ '@doctrine' ] tags: [ 'api_platform.filter' ] - + ApiPlatform\Core\Tests\Fixtures\TestBundle\Filter\BoundsFilter: arguments: [ '@doctrine' ] tags: [ 'api_platform.filter' ] - + ApiPlatform\Core\Tests\Fixtures\TestBundle\Filter\LengthFilter: arguments: [ '@doctrine' ] tags: [ 'api_platform.filter' ] @@ -156,7 +155,7 @@ services: ApiPlatform\Core\Tests\Fixtures\TestBundle\Filter\PatternFilter: arguments: [ '@doctrine' ] tags: [ 'api_platform.filter' ] - + ApiPlatform\Core\Tests\Fixtures\TestBundle\Controller\: resource: '../../TestBundle/Controller' tags: ['controller.service_arguments'] diff --git a/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php b/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php index 744e3e66053..c53dfa048c6 100644 --- a/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php +++ b/tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php @@ -62,6 +62,7 @@ public function testCreateWithDefaults() $annotation = new ApiResource([ 'itemOperations' => ['get', 'delete'], 'attributes' => [ + 'pagination_client_enabled' => true, 'pagination_maximum_items_per_page' => 10, ], ]); @@ -74,6 +75,7 @@ public function testCreateWithDefaults() $this->assertEquals('CHANGEME!', $metadata->getDescription()); $this->assertEquals(['get'], $metadata->getCollectionOperations()); $this->assertEquals(['get', 'delete'], $metadata->getItemOperations()); + $this->assertTrue($metadata->getAttribute('pagination_client_enabled')); $this->assertEquals(4, $metadata->getAttribute('pagination_items_per_page')); $this->assertEquals(10, $metadata->getAttribute('pagination_maximum_items_per_page')); } From 3492922c2733de934cf4798893d907755640869d Mon Sep 17 00:00:00 2001 From: soyuka Date: Thu, 9 Apr 2020 16:56:03 +0200 Subject: [PATCH 3/4] Fix order being a string --- src/Bridge/Doctrine/MongoDbOdm/Extension/OrderExtension.php | 2 +- src/Bridge/Doctrine/Orm/Extension/OrderExtension.php | 2 +- .../Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Bridge/Doctrine/MongoDbOdm/Extension/OrderExtension.php b/src/Bridge/Doctrine/MongoDbOdm/Extension/OrderExtension.php index d335235aff4..68302cf142d 100644 --- a/src/Bridge/Doctrine/MongoDbOdm/Extension/OrderExtension.php +++ b/src/Bridge/Doctrine/MongoDbOdm/Extension/OrderExtension.php @@ -54,7 +54,7 @@ public function applyToCollection(Builder $aggregationBuilder, string $resourceC $identifiers = $classMetaData->getIdentifier(); if (null !== $this->resourceMetadataFactory) { $defaultOrder = $this->resourceMetadataFactory->create($resourceClass)->getAttribute('order'); - if (null !== $defaultOrder) { + if (\is_array($defaultOrder)) { foreach ($defaultOrder as $field => $order) { if (\is_int($field)) { // Default direction diff --git a/src/Bridge/Doctrine/Orm/Extension/OrderExtension.php b/src/Bridge/Doctrine/Orm/Extension/OrderExtension.php index 1d2b1e3f469..0cc5a94d125 100644 --- a/src/Bridge/Doctrine/Orm/Extension/OrderExtension.php +++ b/src/Bridge/Doctrine/Orm/Extension/OrderExtension.php @@ -52,7 +52,7 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator $identifiers = $classMetaData->getIdentifier(); if (null !== $this->resourceMetadataFactory) { $defaultOrder = $this->resourceMetadataFactory->create($resourceClass)->getAttribute('order'); - if (null !== $defaultOrder) { + if (\is_array($defaultOrder)) { foreach ($defaultOrder as $field => $order) { if (\is_int($field)) { // Default direction diff --git a/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php b/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php index 5cc4f107ce6..6fc9f146da4 100644 --- a/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php +++ b/src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php @@ -167,7 +167,7 @@ private function registerCommonConfiguration(ContainerBuilder $container, array $container->setParameter('api_platform.eager_loading.fetch_partial', $config['eager_loading']['fetch_partial']); $container->setParameter('api_platform.eager_loading.force_eager', $config['eager_loading']['force_eager']); $container->setParameter('api_platform.collection.exists_parameter_name', $config['collection']['exists_parameter_name']); - $container->setParameter('api_platform.collection.order', $config['collection']['order']); + $container->setParameter('api_platform.collection.order', $config['defaults']['order'] ?? $config['collection']['order']); $container->setParameter('api_platform.collection.order_parameter_name', $config['collection']['order_parameter_name']); $container->setParameter('api_platform.collection.pagination.enabled', $this->isConfigEnabled($container, $config['defaults']['pagination_enabled'] ?? $config['collection']['pagination'])); $container->setParameter('api_platform.collection.pagination.partial', $config['defaults']['pagination_partial'] ?? $config['collection']['pagination']['partial']); From fbfa61558ede5808aba0deb6f1ca13d4e4e81b80 Mon Sep 17 00:00:00 2001 From: soyuka Date: Thu, 9 Apr 2020 19:28:22 +0200 Subject: [PATCH 4/4] FOSUserBundle deprecates GroupableInterface used by our BaseModel --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 490f91a8104..afae1b511d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2008,7 +2008,7 @@ jobs: fail-fast: false timeout-minutes: 20 env: - SYMFONY_DEPRECATIONS_HELPER: max[total]=5 # 5 deprecation notices from FOSUserBundle + SYMFONY_DEPRECATIONS_HELPER: max[total]=8 # 5 deprecation notices from FOSUserBundle steps: - name: Checkout uses: actions/checkout@v1