Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for GroupSequence #2014

Merged
merged 1 commit into from
Jun 11, 2018
Merged

Conversation

emilien-puget
Copy link
Contributor

Q A
Bug fix? yes
New feature? no
BC breaks? no
Deprecations? no
Tests pass? yes
Fixed tickets #2009
License MIT
Doc PR n/a

@soyuka
Copy link
Member

soyuka commented Jun 11, 2018

Neat, I see this as a new feature though.

@emilien-puget
Copy link
Contributor Author

I am not sure, there is an entry in the documentation (https://api-platform.com/docs/core/validation#using-validation-groups) that mention them

Copy link
Member

@dunglas dunglas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch! Thanks for the fix and the tests.

@@ -52,7 +53,9 @@ public function validate($data, array $context = [])
$validationGroups = $validationGroups($data);
}

$validationGroups = (array) $validationGroups;
if (!($validationGroups instanceof GroupSequence)) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inner parenthesis can be dropped.

@dunglas dunglas merged commit 2c97eca into api-platform:2.2 Jun 11, 2018
@dunglas
Copy link
Member

dunglas commented Jun 11, 2018

Thank you very much @emilien-puget

@emilien-puget
Copy link
Contributor Author

It looks like the problem is also in the master branch, do you want me to do another PR ?

@dunglas
Copy link
Member

dunglas commented Jun 11, 2018

No it's ok @emilien-puget, we merge lower branches in master regularly. Your commit we'll be in master in a few hours or days.

@emilien-puget emilien-puget deleted the group-sequence branch June 11, 2018 13:50
antograssiot added a commit to antograssiot/core that referenced this pull request Jun 11, 2018
@emilien-puget
Copy link
Contributor Author

Ok, thank you. I will close the issue then.

dunglas added a commit that referenced this pull request Jun 11, 2018
8lys pushed a commit to 8lys/core that referenced this pull request Jul 12, 2018
* master: (947 commits)
  Initialize the 'totalCount' property to the default value to 0
  Add index.php for test purpose
  Temporary fix for the tests
  Small code tweaks
  Update changelog
  Swagger UI and GrapQL assets update (api-platform#1975)
  fix cs
  Remove VersionEye badge
  Update changelog
  Update changelog
  Fix fatal error when subresource type is not defined
  added an --output option to the api:swagger:export
  better maxDepth in extractor
  Fix CS
  Fix issue api-platform#1711
  fix CS
  fix issue api-platform#1717
  FilterEagerLoadingExtension accepts joins with class name as join value
  Remove useless steps after api-platform#2014
  Add support for GroupSequence
  ...

# Conflicts:
#	.editorconfig
#	.php_cs.dist
#	.travis.yml
#	CHANGELOG.md
#	CONTRIBUTING.md
#	README.md
#	appveyor.yml
#	behat.yml.dist
#	composer.json
#	features/authorization/deny.feature
#	features/bootstrap/FeatureContext.php
#	features/bootstrap/GraphqlContext.php
#	features/bootstrap/HydraContext.php
#	features/bootstrap/JsonApiContext.php
#	features/bootstrap/JsonContext.php
#	features/bootstrap/SwaggerContext.php
#	features/doctrine/boolean_filter.feature
#	features/doctrine/date_filter.feature
#	features/doctrine/exists_filter.feature
#	features/doctrine/multiple_filter.feature
#	features/doctrine/numeric_filter.feature
#	features/doctrine/order_filter.feature
#	features/doctrine/range_filter.feature
#	features/doctrine/search_filter.feature
#	features/filter/property_filter.feature
#	features/graphql/authorization.feature
#	features/graphql/collection.feature
#	features/graphql/filters.feature
#	features/graphql/introspection.feature
#	features/graphql/mutation.feature
#	features/graphql/query.feature
#	features/hal/hal.feature
#	features/hal/problem.feature
#	features/http_cache/headers.feature
#	features/http_cache/tags.feature
#	features/hydra/collection.feature
#	features/hydra/error.feature
#	features/integration/fos_user.feature
#	features/jsonapi/collection_attributes.feature
#	features/jsonapi/errors.feature
#	features/jsonapi/filtering.feature
#	features/jsonapi/jsonapi.feature
#	features/jsonapi/ordering.feature
#	features/jsonapi/pagination.feature
#	features/jsonld/context.feature
#	features/main/circular_reference.feature
#	features/main/composite.feature
#	features/main/configurable.feature
#	features/main/content_negotiation.feature
#	features/main/crud.feature
#	features/main/custom_normalized.feature
#	features/main/custom_operation.feature
#	features/main/default_order.feature
#	features/main/non_resource.feature
#	features/main/operation.feature
#	features/main/overridden_operation.feature
#	features/main/relation.feature
#	features/main/subresource.feature
#	features/main/table_inheritance.feature
#	features/main/uuid.feature
#	features/security/send_security_headers.feature
#	features/security/strong_typing.feature
#	features/serializer/group_filter.feature
#	features/serializer/property_filter.feature
#	features/swagger/docs.feature
#	phpstan.neon
#	phpunit.xml.dist
#	src/Action/PlaceholderAction.php
#	src/Annotation/ApiFilter.php
#	src/Annotation/ApiProperty.php
#	src/Annotation/ApiResource.php
#	src/Api/CachedIdentifiersExtractor.php
#	src/Api/FilterLocatorTrait.php
#	src/Api/IdentifiersExtractor.php
#	src/Api/ResourceClassResolver.php
#	src/Bridge/Doctrine/Common/DataPersister.php
#	src/Bridge/Doctrine/EventListener/WriteListener.php
#	src/Bridge/Doctrine/Orm/CollectionDataProvider.php
#	src/Bridge/Doctrine/Orm/Extension/EagerLoadingExtension.php
#	src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php
#	src/Bridge/Doctrine/Orm/Extension/PaginationExtension.php
#	src/Bridge/Doctrine/Orm/Filter/AbstractFilter.php
#	src/Bridge/Doctrine/Orm/Filter/DateFilter.php
#	src/Bridge/Doctrine/Orm/Filter/ExistsFilter.php
#	src/Bridge/Doctrine/Orm/Filter/OrderFilter.php
#	src/Bridge/Doctrine/Orm/Filter/SearchFilter.php
#	src/Bridge/Doctrine/Orm/ItemDataProvider.php
#	src/Bridge/Doctrine/Orm/SubresourceDataProvider.php
#	src/Bridge/Doctrine/Orm/Util/IdentifierManagerTrait.php
#	src/Bridge/Doctrine/Orm/Util/QueryBuilderHelper.php
#	src/Bridge/FosUser/EventListener.php
#	src/Bridge/NelmioApiDoc/Extractor/AnnotationsProvider/ApiPlatformProvider.php
#	src/Bridge/Symfony/Bundle/Action/SwaggerUiAction.php
#	src/Bridge/Symfony/Bundle/ApiPlatformBundle.php
#	src/Bridge/Symfony/Bundle/Command/SwaggerCommand.php
#	src/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtension.php
#	src/Bridge/Symfony/Bundle/DependencyInjection/Compiler/DataProviderPass.php
#	src/Bridge/Symfony/Bundle/DependencyInjection/Compiler/DoctrineQueryExtensionPass.php
#	src/Bridge/Symfony/Bundle/DependencyInjection/Configuration.php
#	src/Bridge/Symfony/Bundle/Resources/config/api.xml
#	src/Bridge/Symfony/Bundle/Resources/config/data_persister.xml
#	src/Bridge/Symfony/Bundle/Resources/config/data_provider.xml
#	src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm.xml
#	src/Bridge/Symfony/Bundle/Resources/config/hydra.xml
#	src/Bridge/Symfony/Bundle/Resources/config/problem.xml
#	src/Bridge/Symfony/Bundle/Resources/config/security.xml
#	src/Bridge/Symfony/Bundle/Resources/config/swagger.xml
#	src/Bridge/Symfony/Bundle/Resources/config/validator.xml
#	src/Bridge/Symfony/Bundle/Resources/public/graphiql/graphiql.css
#	src/Bridge/Symfony/Bundle/Resources/public/graphiql/graphiql.min.js
#	src/Bridge/Symfony/Bundle/Resources/public/swagger-ui/swagger-ui-bundle.js
#	src/Bridge/Symfony/Bundle/Resources/public/swagger-ui/swagger-ui-standalone-preset.js
#	src/Bridge/Symfony/Bundle/Resources/public/swagger-ui/swagger-ui.css
#	src/Bridge/Symfony/Bundle/Resources/views/Graphiql/index.html.twig
#	src/Bridge/Symfony/Bundle/Resources/views/SwaggerUi/index.html.twig
#	src/Bridge/Symfony/PropertyInfo/Metadata/Property/PropertyInfoPropertyMetadataFactory.php
#	src/Bridge/Symfony/Routing/ApiLoader.php
#	src/Bridge/Symfony/Routing/CachedRouteNameResolver.php
#	src/Bridge/Symfony/Routing/IriConverter.php
#	src/Bridge/Symfony/Routing/RouteNameResolver.php
#	src/Bridge/Symfony/Validator/EventListener/ValidateListener.php
#	src/Bridge/Symfony/Validator/Validator.php
#	src/DataPersister/ChainDataPersister.php
#	src/DataPersister/DataPersisterInterface.php
#	src/DataProvider/ChainCollectionDataProvider.php
#	src/DataProvider/ChainItemDataProvider.php
#	src/DataProvider/ChainSubresourceDataProvider.php
#	src/DataProvider/ItemDataProviderInterface.php
#	src/Documentation/Action/DocumentationAction.php
#	src/EventListener/AddFormatListener.php
#	src/EventListener/DeserializeListener.php
#	src/EventListener/EventPriorities.php
#	src/EventListener/ReadListener.php
#	src/EventListener/RespondListener.php
#	src/EventListener/SerializeListener.php
#	src/EventListener/WriteListener.php
#	src/GraphQl/Resolver/Factory/CollectionResolverFactory.php
#	src/GraphQl/Resolver/Factory/ItemMutationResolverFactory.php
#	src/GraphQl/Resolver/ItemResolver.php
#	src/GraphQl/Resolver/ResourceAccessCheckerTrait.php
#	src/GraphQl/Serializer/ItemNormalizer.php
#	src/GraphQl/Type/Definition/IterableType.php
#	src/GraphQl/Type/SchemaBuilder.php
#	src/Hal/Serializer/CollectionNormalizer.php
#	src/Hal/Serializer/EntrypointNormalizer.php
#	src/Hal/Serializer/ItemNormalizer.php
#	src/HttpCache/EventListener/AddTagsListener.php
#	src/HttpCache/PurgerInterface.php
#	src/Hydra/Serializer/CollectionFiltersNormalizer.php
#	src/Hydra/Serializer/CollectionNormalizer.php
#	src/Hydra/Serializer/ConstraintViolationListNormalizer.php
#	src/Hydra/Serializer/DocumentationNormalizer.php
#	src/Hydra/Serializer/EntrypointNormalizer.php
#	src/Hydra/Serializer/ErrorNormalizer.php
#	src/Hydra/Serializer/PartialCollectionViewNormalizer.php
#	src/JsonApi/EventListener/TransformFieldsetsParametersListener.php
#	src/JsonApi/Serializer/CollectionNormalizer.php
#	src/JsonApi/Serializer/ConstraintViolationListNormalizer.php
#	src/JsonApi/Serializer/EntrypointNormalizer.php
#	src/JsonApi/Serializer/ErrorNormalizer.php
#	src/JsonApi/Serializer/ItemNormalizer.php
#	src/JsonApi/Serializer/ReservedAttributeNameConverter.php
#	src/JsonLd/EntrypointBuilderInterface.php
#	src/Metadata/Extractor/XmlExtractor.php
#	src/Metadata/Property/Factory/AnnotationSubresourceMetadataFactory.php
#	src/Metadata/Property/Factory/CachedPropertyMetadataFactory.php
#	src/Metadata/Property/Factory/CachedPropertyNameCollectionFactory.php
#	src/Metadata/Property/Factory/ExtractorPropertyMetadataFactory.php
#	src/Metadata/Property/Factory/ExtractorPropertyNameCollectionFactory.php
#	src/Metadata/Property/PropertyMetadata.php
#	src/Metadata/Resource/Factory/CachedResourceMetadataFactory.php
#	src/Metadata/Resource/Factory/CachedResourceNameCollectionFactory.php
#	src/Metadata/Resource/Factory/OperationResourceMetadataFactory.php
#	src/Metadata/Resource/ResourceMetadata.php
#	src/Operation/Factory/CachedSubresourceOperationFactory.php
#	src/Operation/Factory/SubresourceOperationFactory.php
#	src/Problem/Serializer/ErrorNormalizer.php
#	src/Problem/Serializer/ErrorNormalizerTrait.php
#	src/Serializer/AbstractCollectionNormalizer.php
#	src/Serializer/AbstractConstraintViolationListNormalizer.php
#	src/Serializer/AbstractItemNormalizer.php
#	src/Serializer/ItemNormalizer.php
#	src/Serializer/SerializerContextBuilder.php
#	src/Swagger/Serializer/DocumentationNormalizer.php
#	src/Util/AnnotationFilterExtractorTrait.php
#	src/Util/ErrorFormatGuesser.php
#	src/Util/RequestAttributesExtractor.php
#	src/Validator/EventListener/ValidateListener.php
#	tests/Annotation/ApiFilterTest.php
#	tests/Annotation/ApiPropertyTest.php
#	tests/Annotation/ApiResourceTest.php
#	tests/Api/CachedIdentifiersExtractorTest.php
#	tests/Api/FilterLocatorTraitTest.php
#	tests/Api/IdentifiersExtractorTest.php
#	tests/Api/ResourceClassResolverTest.php
#	tests/Bridge/Doctrine/Common/DataPersisterTest.php
#	tests/Bridge/Doctrine/EventListener/WriteListenerTest.php
#	tests/Bridge/Doctrine/Orm/CollectionDataProviderTest.php
#	tests/Bridge/Doctrine/Orm/Extension/EagerLoadingExtensionTest.php
#	tests/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtensionTest.php
#	tests/Bridge/Doctrine/Orm/Extension/FilterExtensionTest.php
#	tests/Bridge/Doctrine/Orm/Extension/PaginationExtensionTest.php
#	tests/Bridge/Doctrine/Orm/Filter/BooleanFilterTest.php
#	tests/Bridge/Doctrine/Orm/Filter/DateFilterTest.php
#	tests/Bridge/Doctrine/Orm/Filter/ExistsFilterTest.php
#	tests/Bridge/Doctrine/Orm/Filter/NumericFilterTest.php
#	tests/Bridge/Doctrine/Orm/Filter/OrderFilterTest.php
#	tests/Bridge/Doctrine/Orm/Filter/RangeFilterTest.php
#	tests/Bridge/Doctrine/Orm/Filter/SearchFilterTest.php
#	tests/Bridge/Doctrine/Orm/ItemDataProviderTest.php
#	tests/Bridge/Doctrine/Orm/PaginatorTest.php
#	tests/Bridge/Doctrine/Orm/SubresourceDataProviderTest.php
#	tests/Bridge/FosUser/EventListenerTest.php
#	tests/Bridge/NelmioApiDoc/Extractor/AnnotationsProvider/ApiPlatformProviderTest.php
#	tests/Bridge/Symfony/Bundle/ApiPlatformBundleTest.php
#	tests/Bridge/Symfony/Bundle/Command/SwaggerCommandTest.php
#	tests/Bridge/Symfony/Bundle/DependencyInjection/ApiPlatformExtensionTest.php
#	tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/AnnotationFilterPassTest.php
#	tests/Bridge/Symfony/Bundle/DependencyInjection/Compiler/DoctrineQueryExtensionPassTest.php
#	tests/Bridge/Symfony/Bundle/DependencyInjection/ConfigurationTest.php
#	tests/Bridge/Symfony/Routing/ApiLoaderTest.php
#	tests/Bridge/Symfony/Routing/CachedRouteNameResolverTest.php
#	tests/Bridge/Symfony/Routing/IriConverterTest.php
#	tests/Bridge/Symfony/Routing/RouteNameGeneratorTest.php
#	tests/Bridge/Symfony/Routing/RouteNameResolverTest.php
#	tests/Bridge/Symfony/Routing/RouterOperationPathResolverTest.php
#	tests/Bridge/Symfony/Validator/EventListener/ValidateListenerTest.php
#	tests/Bridge/Symfony/Validator/ValidatorTest.php
#	tests/DataProvider/ChainCollectionDataProviderTest.php
#	tests/DataProvider/ChainItemDataProviderTest.php
#	tests/DataProvider/ChainSubresourcedataProviderTest.php
#	tests/Documentation/Action/DocumentationActionTest.php
#	tests/EventListener/AddFormatListenerTest.php
#	tests/EventListener/DeserializeListenerTest.php
#	tests/EventListener/EventPrioritiesTest.php
#	tests/EventListener/ReadListenerTest.php
#	tests/EventListener/RespondListenerTest.php
#	tests/EventListener/SerializeListenerTest.php
#	tests/EventListener/WriteListenerTest.php
#	tests/Fixtures/FileConfigurations/parse_exception.yml
#	tests/Fixtures/TestBundle/Controller/CustomActionController.php
#	tests/Fixtures/TestBundle/Entity/AbstractDummy.php
#	tests/Fixtures/TestBundle/Entity/CircularReference.php
#	tests/Fixtures/TestBundle/Entity/Container.php
#	tests/Fixtures/TestBundle/Entity/CustomActionDummy.php
#	tests/Fixtures/TestBundle/Entity/DummyCar.php
#	tests/Fixtures/TestBundle/Entity/DummyGroup.php
#	tests/Fixtures/TestBundle/Entity/DummyProperty.php
#	tests/Fixtures/TestBundle/Entity/DummyTableInheritance.php
#	tests/Fixtures/TestBundle/Entity/DummyTableInheritanceRelated.php
#	tests/Fixtures/TestBundle/Entity/EmbeddableDummy.php
#	tests/Fixtures/TestBundle/Entity/EmbeddedDummy.php
#	tests/Fixtures/TestBundle/Entity/Foo.php
#	tests/Fixtures/TestBundle/Entity/FourthLevel.php
#	tests/Fixtures/TestBundle/Entity/JsonldContextDummy.php
#	tests/Fixtures/TestBundle/Entity/OverriddenOperationDummy.php
#	tests/Fixtures/TestBundle/Entity/RelatedToDummyFriend.php
#	tests/Fixtures/TestBundle/Entity/RelationEmbedder.php
#	tests/Fixtures/TestBundle/Entity/SecuredDummy.php
#	tests/Fixtures/TestBundle/Resources/config/api_resources.yml
#	tests/Fixtures/TestBundle/Serializer/Denormalizer/SerializableResourceDenormalizer.php
#	tests/Fixtures/app/AppKernel.php
#	tests/Fixtures/app/config/config_mysql.yml
#	tests/Fixtures/app/config/config_postgres.yml
#	tests/Fixtures/app/config/config_test.yml
#	tests/Fixtures/app/config/routing.yml
#	tests/GraphQl/Resolver/Factory/CollectionResolverFactoryTest.php
#	tests/GraphQl/Resolver/Factory/ItemMutationResolverFactoryTest.php
#	tests/GraphQl/Serializer/ItemNormalizerTest.php
#	tests/GraphQl/Type/Definition/IterableTypeTest.php
#	tests/GraphQl/Type/SchemaBuilderTest.php
#	tests/Hal/Serializer/CollectionNormalizerTest.php
#	tests/Hal/Serializer/EntrypointNormalizerTest.php
#	tests/Hal/Serializer/ItemNormalizerTest.php
#	tests/Hydra/Serializer/CollectionFiltersNormalizerTest.php
#	tests/Hydra/Serializer/CollectionNormalizerTest.php
#	tests/Hydra/Serializer/ConstraintViolationNormalizerTest.php
#	tests/Hydra/Serializer/DocumentationNormalizerTest.php
#	tests/Hydra/Serializer/EntrypointNormalizerTest.php
#	tests/Hydra/Serializer/ErrorNormalizerTest.php
#	tests/Hydra/Serializer/ItemNormalizerTest.php
#	tests/Hydra/Serializer/PartialCollectionViewNormalizerTest.php
#	tests/JsonApi/EventListener/TransformFieldsetsParametersListenerTest.php
#	tests/JsonApi/Serializer/CollectionNormalizerTest.php
#	tests/JsonApi/Serializer/ConstraintViolationNormalizerTest.php
#	tests/JsonApi/Serializer/EntrypointNormalizerTest.php
#	tests/JsonApi/Serializer/ErrorNormalizerTest.php
#	tests/JsonApi/Serializer/ItemNormalizerTest.php
#	tests/JsonApi/Serializer/ReservedAttributeNameConverterTest.php
#	tests/JsonLd/Action/ContextActionTest.php
#	tests/Metadata/Extractor/YamlExtractorTest.php
#	tests/Metadata/Property/Factory/AnnotationPropertyMetadataFactoryTest.php
#	tests/Metadata/Property/Factory/AnnotationPropertyNameCollectionFactoryTest.php
#	tests/Metadata/Property/Factory/ExtractorPropertyMetadataFactoryTest.php
#	tests/Metadata/Property/Factory/ExtractorPropertyNameCollectionFactoryTest.php
#	tests/Metadata/Property/Factory/FileConfigurationMetadataFactoryProvider.php
#	tests/Metadata/Property/PropertyMetadataTest.php
#	tests/Metadata/Resource/Factory/AnnotationResourceMetadataFactoryTest.php
#	tests/Metadata/Resource/Factory/ExtractorResourceMetadataFactoryTest.php
#	tests/Metadata/Resource/Factory/ExtractorResourceNameCollectionFactoryTest.php
#	tests/Metadata/Resource/Factory/FileConfigurationMetadataFactoryProvider.php
#	tests/Metadata/Resource/Factory/OperationResourceMetadataFactoryTest.php
#	tests/Metadata/Resource/ResourceMetadataTest.php
#	tests/Operation/Factory/CachedSubresourceOperationFactoryTest.php
#	tests/Operation/Factory/SubresourceOperationFactoryTest.php
#	tests/PathResolver/DashOperationPathResolverTest.php
#	tests/PathResolver/UnderscoreOperationPathResolverTest.php
#	tests/Problem/Serializer/ConstraintViolationNormalizerTest.php
#	tests/Problem/Serializer/ErrorNormalizerTest.php
#	tests/Security/EventListener/DenyAccessListenerTest.php
#	tests/Security/ResourceAccessCheckerTest.php
#	tests/Serializer/AbstractItemNormalizerTest.php
#	tests/Serializer/ItemNormalizerTest.php
#	tests/Serializer/SerializerContextBuilderTest.php
#	tests/Serializer/SerializerFilterContextBuilderTest.php
#	tests/Swagger/Serializer/DocumentationNormalizerTest.php
#	tests/Util/AnnotationFilterExtractorTraitTest.php
#	tests/Util/ErrorFormatGuesserTest.php
#	tests/Util/IriHelperTest.php
#	tests/Validator/EventListener/ValidateListenerTest.php
#	update-js.sh
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants