Skip to content

Commit

Permalink
Merge fbfa615 into dd497cf
Browse files Browse the repository at this point in the history
  • Loading branch information
dunglas committed Apr 9, 2020
2 parents dd497cf + fbfa615 commit 0abac07
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 38 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Expand Up @@ -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
Expand Down
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion src/Bridge/Doctrine/Orm/Extension/OrderExtension.php
Expand Up @@ -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
Expand Down
Expand Up @@ -167,26 +167,26 @@ 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['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']);
Expand All @@ -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' => []];
Expand Down
Expand Up @@ -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()
Expand Down
29 changes: 14 additions & 15 deletions tests/Fixtures/app/config/config_common.yml
Expand Up @@ -58,25 +58,24 @@ 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
ApiPlatform\Core\Exception\FilterValidationException: !php/const Symfony\Component\HttpFoundation\Response::HTTP_BAD_REQUEST
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: 'ASC'
cache_headers:
max_age: 60
shared_max_age: 3600
vary: ['Accept', 'Cookie']
public: true

parameters:
container.autowiring.strict_mode: true
Expand Down Expand Up @@ -144,19 +143,19 @@ 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' ]

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']
Expand Down
Expand Up @@ -62,6 +62,7 @@ public function testCreateWithDefaults()
$annotation = new ApiResource([
'itemOperations' => ['get', 'delete'],
'attributes' => [
'pagination_client_enabled' => true,
'pagination_maximum_items_per_page' => 10,
],
]);
Expand All @@ -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'));
}
Expand Down

0 comments on commit 0abac07

Please sign in to comment.