# Changelog ## v2.7.9 ### Bug fixes * [1983089d9](https://github.com/api-platform/core/commit/1983089d9c2de4bb9fc36c60929aff538af89b8e) fix(metadata): reader should be nullable (#5378) * [80aeb3158](https://github.com/api-platform/core/commit/80aeb3158311ff4ce9ad28b7f813dedee7744828) fix(symfony): autoconfigure elasticsearch extension (#5379) ## v2.7.8 ### Bug fixes * [b15a97d7f](https://github.com/api-platform/core/commit/b15a97d7fa65ec78934e24a30289cb499d4365e7) fix(symfony): autoconfigure elasticsearch extension (#5376) * [cbe7355d1](https://github.com/api-platform/core/commit/cbe7355d184d75465a5e5acc51f9c4f24ab5b52c) fix(metadata): annotation reader should be nullable ## v2.7.7 ### Bug fixes * [53cb25fab](https://github.com/api-platform/core/commit/53cb25fab0fcec2d336590c7e82e1c6a8728d00a) fix(symfony): annotation reader argument optional (#5358) ## v2.7.6 ### Bug fixes * [31215c623](https://github.com/api-platform/core/commit/31215c62365c6b9095486c307d29837e53c0357a) ci: fix mongod startup (#5248) * [444f339ae](https://github.com/api-platform/core/commit/444f339ae8c73d2b1a23a703f44adbc6f8d52305) fix: avoid unneeded use of covariance to keep compatibility with PHP < 7.4 (#5327) * [5baea781c](https://github.com/api-platform/core/commit/5baea781cf20249032fac337728da2f5617789db) fix(metadata): fix extra properties method (#5294) * [a6f0d9aac](https://github.com/api-platform/core/commit/a6f0d9aac5b13c13694ebfa67e2a13b4a216c329) fix(symfony): http cache wrong metadata argument * [ab6822f77](https://github.com/api-platform/core/commit/ab6822f775ab63070adaab68ae13adc01a6e3dd7) fix: Set twig.exception_listener as service parent (#5059) * [f22fa73f4](https://github.com/api-platform/core/commit/f22fa73f41663f2c6a2391d3c1b8623098a51a0d) fix(elasticsearch): elasticsearch BC ## v2.7.5 ### Bug fixes * [096ac119a](https://github.com/api-platform/core/commit/096ac119a5126bdc5e7877172a033d7cdaa28983) fix(metadata): keep configured uri variables (#5217) * [2b2d468f0](https://github.com/api-platform/core/commit/2b2d468f06a63ecfa4928d5d631953acb624c181) fix(metadata): operations must inherit from resource and defaults * [2cb3b4272](https://github.com/api-platform/core/commit/2cb3b42725105aaf34dc9d71d2c03e156acd5833) fix(serializer): use iri from $context if defined (#5201) * [39398579e](https://github.com/api-platform/core/commit/39398579e32976b5b4b0219da98fdb35629a35ad) fix(symfony): definition when mercure is not installed (#5206) * [e9c7e4abb](https://github.com/api-platform/core/commit/e9c7e4abb683bb830a61712a8b63b8063e015b13) fix(serializer): avoid call to legacy iri converter with non-resource class (#5219) * [ebaad51b2](https://github.com/api-platform/core/commit/ebaad51b2ce173b6c59582dcc6fb311f1f4b7fa9) fix(serializer): read groups off the root operation (#5196) ## v2.7.4 ### Bug fixes * [706f66f6b](https://github.com/api-platform/core/commit/706f66f6b39d60f031dd610a8586c6e576827ce9) fix(metadata): allow input/output configuration values to be bool in yaml config (#5186) * [b3bc4d6ac](https://github.com/api-platform/core/commit/b3bc4d6ac33f1a9756cc91c86d8cc30049ed044f) fix: use legacy iri converter for legacy resources (#5172) ## v2.7.3 ### Bug fixes * [176fff2cb](https://github.com/api-platform/core/commit/176fff2cb15efa01b6c898d0442a4f540d4ddeaa) fix(metadata): upgrade script keep operation name (#5109) * [1b64ebf6a](https://github.com/api-platform/core/commit/1b64ebf6a438222ae091ec3690063d0fb1b61977) fix: upgrade command remove ApiSubresource attribute (#5049) * [27fcdc6b2](https://github.com/api-platform/core/commit/27fcdc6b270d1699e76c37ccda690b8a5ed8b4c9) fix(metadata): deprecate when user decorates in legacy mode (#5091) * [310363d56](https://github.com/api-platform/core/commit/310363d56129c94cf4d51977f85486729e582fbc) fix: remove @internal annotation for Operations (#5089) * [41bbad94e](https://github.com/api-platform/core/commit/41bbad94e93df49eb4ade0fe1307b20d9cd07102) fix: update yaml extractor test file coding standard (#5068) * [59826bbe9](https://github.com/api-platform/core/commit/59826bbe9e246cf839bdc0c4d0d470f54e27b453) fix: only alias if exists for opcache preload * [8250d41a3](https://github.com/api-platform/core/commit/8250d41a38913a17364d617875bb5a90f434ec48) fix(metadata): define a name on a single operation (#5090) * [9c19fa171](https://github.com/api-platform/core/commit/9c19fa17110aac7dd39bff827091c00b42a80d4f) fix(metadata): add class key in payload argument resolver (#5067) ## 2.7.2 * Metadata: no skolem IRI by default * Symfony: use service id as tag for lower symfony versions (processor/provider service locator) * Symfony: fix command constants not available on lower symfony versions ## 2.7.1 * Chore: update swagger ui and javascript libraries (#5028) * Symfony: don't use ArrayAdapter cache in production #4975 (#5025) * Doctrine: check fetch joined queries based on all aliases (#4974) * Metadata: fix missing `array` cast for RDF types in `ApiResource` & `ApiProperty` constructors (#5000) * Symfony: replace FQCN service names by snake ones (#5019) * Symfony: add missing dependency on symfony/deprecation-contracts (#5015) * Chore: add conflict on elasticsearch >= 8.0 (#5018) * Symfony: bc layer broken for symfony/console lower than 5.3 (#4990) * Symfony: missing deprecations related to Ulid and Uuid normalize… (#4963) * Metadata: do not auto-generate NotExposed operation when using custom operation classes * Symfony: upgrade command requires phpunit (#4968) * Symfony: upgrade command removes filters (#4970) * Symfony: missing Elasticsearch DocumentMetadataFactoryInterface alias definition (#4962) * Chore: drop dependency on fig/link-util (#4945) * Metadata: resource name collection missing deprecation (#4953) * Doctrine: ability to use ORM and ODM (#5032) ## 2.7.0 * chore: remove @experimental phpdoc (#4933) * Metadata: do not set id when identifier is `false` (#4880) * Metadata: automatic GET operation when none is declared (#4881) * Metadata: exception to status on operations (#4861) * Serializer: adds the JSON_INVALID_UTF8_IGNORE flag to JsonEncode (#4741) * Symfony: autoconfigure legacy Doctrine extensions (#4909) * Elasticsearch: skip metadata without ES nodes (#4913) Various cs fixes and PHPDoc to help upgrading to 3.0. ## 2.7.0-rc.3 * Symfony: deprecate the `$exceptionOnNoToken` parameter in `ResourceAccessChecker::__construct()` (#4900) ## 2.7.0-beta.5 * Serializer: ignore no-operation on SerializeListener (#4828) * Schema: schema generation with default operation (#4818) ## 2.7.0-beta.4 * Metadata: reduce coalescing operator call (#4810) * Api: remove dump (#4809) ## 2.7.0-beta.3 * Metadata: use the HTTP method instead of an interface for writability (#4785) * Cache: IriConverter gets called only for resources (#4796) * JsonApi: Use skolem IRIs (#4796) * Metadata: Merge defaults instead of overriding (#4796) * ApiTestCase: Fix JSON Schema assertions (#4796) * Metadata: Cast YAML/XML values properly (#4800) * Symfony: fix deprecations (#4795 #4801 #4802) * Input/Output: backport serializer changes to make input/output work as resource classes without data transformers (#4804) * GraphQl: the SerializerContextBuilder interface changes to reflect operation instead of the operation name **BC** (#4804) ## 2.7.0-beta.2 * Processor: adds `previous_data` to the context (#4776) * Doctrine: fix filter binding (#4789) * Cache: fix headers not being read from metadata (#4777) ## 2.7.0-beta * Json-Ld: property metadata types and iris (#4769) * Symfony: write listener uri variables converter (#4774) * Metadata: extra properties operation inheritance (#4773) **BC** Doctrine: new interfaces for Filters and Extensions ready, switch to the `ApiPlatform\Doctrine` namespace after fixing your deprecations: (#4779) - `ApiPlatform\Core\Bridge\Doctrine\Orm\Extension` interfaces have an `Operation` instead of the `$operationName`, the new namespace is `ApiPlatform\Doctrine\Orm\Extension` - `ApiPlatform\Core\Bridge\Doctrine\MongoDbOdm\Extension` interfaces have an `Operation` instead of the `$operationName`, the new namespace is `ApiPlatform\Doctrine\Odm\Extension` ## 2.7.0-alpha.7 * Metadata: defaults deprecation (#4772) ## 2.7.0-alpha.6 * GraphQl: output creates its own type in TypeBuilder (#4766) * Metadata: clear missing metadata cache pools (#4770) * Metadata: property override when value is set (#4767) * Metadata: add read and write to extractor (#4760) * JsonSchema: factory backward compatibility layer (#4758) * Metadata: defaults properly overrides metadata (#4759) * Metadata: Add missing processor and provider to extractor (#4754) ## 2.7.0-alpha.5 * Backward compatibility: fix upgrade script for subresources (#4747) * Backward compatibility: fix dependency injection (#4748) ## 2.7.0-alpha.4 * Backward compatibility: fix dependency injection (#4744) * Metadata: allow extra keys within defaults (#4743) ## 2.7.0-alpha.3 * Implements Skolem IRIs instead of blank nodes, can be disabled using `iri: false` (#4731) * IRI Converter: new interface declaring `getIriFromResource` and `getResourceFromIri` (#4734) ## 2.7.0-alpha.2 * Review interfaces (ProcessorInterface, ProviderInterface, TypeConverterInterface, ResolverFactoryInterface etc.) to use `ApiPlatform\Metadata\Operation` instead of `operationName` (#4712) * Introduce `CollectionOperationInterface` instead of the `collection` flag (#4712) * Introduce `DeleteOperationInterface` instead of the `delete` flag (#4712) * The `compositeIdentifier` flag only lives under the `uriVariables` property (#4712) * The `provider` or `processor` property is specified within the `Operation` and we removed the chain pattern (#4712) * JSON Schema: fix nullable types validation using assertMatchesResourceItemJsonSchema (#4725) * Elasticsearch: verify whether mapping type is supported (#4726) * Deprecate Data Transformers (#4722) * Fix missing service declaration and BC breaks (#4721 #4716 #4717 #4718) * Hydra: add hydra view example values (#4681) ## 2.7.0-alpha.1 * Swagger UI: Add `usePkceWithAuthorizationCodeGrant` to Swagger UI initOAuth (#4649) * **BC**: `mapping.paths` in configuration should override bundles configuration (#4465) * GraphQL: Add the ability to use different pagination types for the queries of a resource (#4453) * Security: **BC** Fix `ApiProperty` `security` attribute expression being passed a class string for the `object` variable on updates/creates - null is now passed instead if the object is not available (#4184) * Security: `ApiProperty` now supports a `security_post_denormalize` attribute, which provides access to the `object` variable for the object being updated/created and `previous_object` for the object before it was updated (#4184) * Maker: Add `make:data-provider` and `make :data-persister` commands to generate a data provider / persister (#3850) * JSON Schema: Add support for generating property schema with numeric constraint restrictions (#4225) * JSON Schema: Add support for generating property schema with Collection restriction (#4182) * JSON Schema: Add support for generating property schema format for Url and Hostname (#4185) * JSON Schema: Add support for generating property schema with Count restriction (#4186) * JSON Schema: Manage Compound constraint when generating property metadata (#4180) * Validator: Add an option to disable query parameter validation (#4165) * JSON Schema: Add support for generating property schema with Choice restriction (#4162) * JSON Schema: Add support for generating property schema with Range restriction (#4158) * JSON Schema: Add support for generating property schema with Unique restriction (#4159) * **BC**: Change `api_platform.listener.request.add_format` priority from 7 to 28 to execute it before firewall (priority 8) (#3599) * **BC**: Use `@final` annotation in ORM filters (#4109) * Allow defining `exception_to_status` per operation (#3519) * Doctrine: Better exception to find which resource is linked to an exception (#3965) * Doctrine: Allow mixed type value for date filter (notice if invalid) (#3870) * Doctrine: Add `nulls_always_first` and `nulls_always_last` to `nulls_comparison` in order filter (#4103) * Doctrine: Add a global `order_nulls_comparison` configuration (#3117) * MongoDB: `date_immutable` support (#3940) * DataProvider: Add `TraversablePaginator` (#3783) * JSON:API: Support inclusion of resources from path (#3288) * Swagger UI: Add `swagger_ui_extra_configuration` to Swagger / OpenAPI configuration (#3731) * Allow controller argument with a name different from `$data` thanks to an argument resolver (#3263) * GraphQL: Support `ApiProperty` security (#4143) * GraphQL: **BC** Fix security on association collection properties. The collection resource `item_query` security is no longer used. `ApiProperty` security can now be used to secure collection (or any other) properties. (#4143) * Deprecate `allow_plain_identifiers` option (#4167) * Exception: Add the ability to customize multiple status codes based on the validation exception (#4017) * ApiLoader: Support `_format` resolving (#4292) * Metadata: new namespace `ApiPlatform\Metadata` instead of `ApiPlatform\Core\Metadata`, for example `ApiPlatform\Metadata\ApiResource` (#4351) * Metadata: deprecation of `ApiPlatform\Core\Annotation` (#4351) * Metadata: `ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface` is deprecated in favor of `ApiPlatform\Metadata\Resource\Factory\ResourceMetadataCollectionFactoryInterface` (#4351) * Metadata: item and collection prefixes for operations are deprecated, as well as the `ApiPlatform\Core\Api\OperationType` class (#4351) * Graphql: `ApiPlatform\Metadata\GraphQl` follow the same metadata conventions (a Subscription operation is available and isn't hidden behind an update Mutation anymore), interfaces got simplified (being @experimental) (#4351) * IriConverter: new interface for `ApiPlatform\Bridge\Symfony\Routing\IriConverter` that adds an operationName, same for `ApiPlatform\Api\IdentifiersExtractor` (#4351) * DataProvider: new `ApiPlatform\State\ProviderInterface` that replaces DataProviders (#4351) * DataPersister: new `ApiPlatform\State\ProcessorInterface` that replaces DataPersisters (#4351) * A new configuration is available to keep old services (IriConverter, IdentifiersExtractor and OpenApiFactory) `metadata_backward_compatibility_layer` (defaults to false) (#4351) * Add support for `security_post_validation` attribute * Mark the GraphQL subsystem as stable (#4500) * feat(test): add `Client::loginUser()` (#4588) * feat(http_cache): use symfony/http-client instead of guzzlehttp/guzzle, `ApiPlatform\Core\HttpCache\PurgerInterface` is deprecated in favor of `ApiPlatform\HttpCache\PurgerInterface`, new purger that uses PURGE (#4695) ## 2.6.9 * fix(serializer): remove 'iri' from context cache (#4925) ## 2.6.8 * fix: serializing embedded non resource objects * chore(openapi): upgrade Swagger UI to version 4.1.3 * chore(openapi): upgrade ReDoc to version 2.0.0-rc.59 * chore(graphql): upgrade GraphiQL to version 1.5.16 ## 2.6.7 * feat: compatibility with Symfony 6 (#4503, #4582, #4604, #4564) * feat: compatibility with PHP 8.1 (#4503, #4582, #4604) * fix: pass the child context when normalizing nested non-resource objects (#4521) ## 2.6.6 * fix(json-schema): consider `SplFileInfo` class as a binary type (#4332) * fix(json-schema): use `collectionKeyType` for building JSON Schema (#4385) * fix(openapi): failing recursion on api resources with "paths" key (#4325) * fix(graphql): make sure form content type is recognized as a multipart request (#4461) * fix(doctrine): handle inverse side of OneToOne association in Doctrine search filter (#4366) * fix(doctrine): usage of deprecated DBAL type constants (#4399) * fix(test): fix `REMOTE_ADDR` support in `ApiTestCase` (#4446) * fix(docs): use `asset_package` for all assets (#4470) * fix(docs): upgrade Swagger UI to version 3.52.3 (#4477) * fix(docs): upgrade ReDoc to version 2.0.0-rc.56 (#4477) * fix(docs): upgrade Swagger UI to version 2.0.0-rc.56 (#4477) ## 2.6.5 * Fix various usage of various deprecated methods * JsonSchema: Update Hydra `@context` property possible types (#4223) * JsonSchema: Add hydra:previous` to the `hydra:view` schema properties (#4310) * Filter validation: Fix issue in Required filter validator with dot notation (#4221) * OpenAPI: Fix notice/warning for `response` without `content` in the `openapi_context` (#4210) * OpenAPI: Do not use output for request body (#4213) * OpenAPI: Do not use JSON-lD schema for all media types (#4247) (BC note: `SchemaFactory::buildSchema()` is now immutable as it no longer modifies the passed `$schema`) * OpenAPI: Allow setting extensionProperties with YAML schema definition (#4228) * OpenAPI: do not throw error with non-standard HTTP verb (#4304) * Serializer: Convert internal error to HTTP 400 in Ramsey uuid denormalization from invalid body string (#4200) * GraphQL: Fix `FieldsBuilder` not fully unwrapping nested types before deciding if a resolver is needed (#4251) * GraphQL: Do not use a resolver for the nested payload of a mutation or subscription (#4289) * GraphQL: Allow search filter to use an int for its value (#4295) * Varnish: Improve `BAN` regex performance (#4231) * MongoDB: Fix denormalization of properties with embeds many that omit target document directive (#4315) * MongoDB: Fix resolving proxy class in class metadata factory (#4322) * Test: Add `withOptions()` to our HttpClient implementation (#4282) * Metadata: Fix allow using constants in XML configuration (resource attribute) (#4321) ## 2.6.4 * OpenAPI: Using an implicit flow is now valid, changes oauth configuration default values (#4115) * OpenAPI: Fix `response` support via the `openapi_context` (#4116) * OpenAPI: Fix `Link->requestBody` default value (#4116) * OpenAPI: Make sure we do not override defined parameters (#4138) * Swagger UI: Remove Google fonts (#4112) * Serializer: Fix denormalization of basic property-types in XML and CSV (#4145) * Serializer: Fix denormalization of collection with one element in XML (#4154) * JSON Schema: Manage Sequentially and AtLeastOneOf constraints when generating property metadata (#4139 and #4147) * JSON Schema: properties regex pattern is now correctly anchored (#4176 and #4198) * JSON Schema: Fix PropertySchemaLengthRestriction string-only (#4177) * Doctrine: Fix purging HTTP cache for unreadable relations (#3441) * Doctrine: Revert #3774 support for binary UUID in search filter (#4134) * Doctrine: Fix order filter when using embedded and nulls comparison (#4151) * Doctrine: Fix duplicated eager loading joins (#3525) * Doctrine: Fix joinRelations with multiple associations. (#2791) * Doctrine: Revert using `defaults.order` as `collection.order` (#4178) * GraphQL: Partial pagination support (#3223) * GraphQL: Manage `pagination_use_output_walkers` and `pagination_fetch_join_collection` for operations (#3311) * GraphQL: Make sure the order of order filters is preserved if nested resources are used (#4171) * Metadata: Sort mapping resources (#3256) * UUID: manage Ulid in format property schema restriction (#4148) * Symfony: Do not override Vary headers already set in the Response (#4146) * Symfony: Make Twig dependency lazy (#4187) * Compatibility with `psr/cache` version 2 and 3 (#4117) * Docs: Upgrade Swagger UI to version 3.46.0 * Docs: Upgrade ReDoc to version 2.0.0-rc.51 * Docs: Upgrade GraphiQL to version 1.4.1 ## 2.6.3 * Identifiers: Re-allow `POST` operations even if no identifier is defined (#4052) * Hydra: Fix partial pagination which no longer returns the `hydra:next` property (#4015) * Security: Use a `NullToken` when using the new authenticator manager in the resource access checker (#4067) * Mercure: Do not use data in options when deleting (#4056) * Doctrine: Support for foreign identifiers (#4042) * Doctrine: Support for binary UUID in search filter (#3774, reverted in 2.6.4) * Doctrine: Do not add join or lookup for search filter with empty value (#3703) * Doctrine: Reduce code duplication in search filter (#3541) * JSON Schema: Allow generating documentation when property and method start from "is" (property `isActive` and method `isActive`) (#4064) * OpenAPI: Fix missing 422 responses in the documentation (#4086) * OpenAPI: Fix error when schema is empty (#4051) * OpenAPI: Do not set scheme to oauth2 when generating securitySchemes (#4073) * OpenAPI: Fix missing `$ref` when no `type` is used in context (#4076) * GraphQL: Fix "Resource class cannot be determined." error when a null iterable field is returned (#4092) * Metadata: Check the output class when calculating serializer groups (#3696) ## 2.6.2 * Validation: properties regex pattern is now compliant with ECMA 262 (#4027) * OpenApi: normalizer is now backward compatible (#4016), fix the name converter issue changing OpenApi properties (#4019) * Identifiers: Break after transforming the identifier (#3985), use the identifiers context to transform with multiple classes (#4029) * JsonSchema: Revert `ALLOW_EXTRA_ATTRIBUTE=false` as it is a BC break and will be done in 3.0 instead see #3881 (#4007) * Subresource: fix ApiSubresource maxDepth option (#3986), recursive issue in the profiler (#4023) * OpenApi: Allow `requestBody` and `parameters` via the `openapi_context` (#4001), make `openapi_context` work on subresources (#4004), sort paths (#4013) * Config: Allow disabling OpenAPI and Swagger UI without loosing the schema (#3968 and #4018), fix pagination defaults (#4011) * DataPersister: context propagation fix (#3983) ## 2.6.1 * Fix defaults when using attributes (#3978) ## 2.6.0 * Cache: adds a `max_header_length` configuration (#2865) * Cache: support `stale-while-revalidate` and `stale-if-error` cache control headers (#3439) * Config: Add an option to set global default values (#3151) * DTO: Add `ApiPlatform\Core\DataTransformer\DataTransformerInitializerInterface` to pre-hydrate inputs (#3701) * DTO: Improve Input/Output support (#3231) * Data Persisters: Add `previous_data` to the context passed to persisters when available (#3752) * Data Persister: Add a `ResumableDataPersisterInterface` that allows to call multiple persisters (#3912) * Debug: Display API Platform's version in the debug bar (#3235) * Docs: Make `asset_package` configurable (#3764) * Doctrine: Allow searching on multiple values on every strategies (#3786) * Elasticsearch: The `Paginator` class constructor now receives the denormalization context to support denormalizing documents using serialization groups. This change may cause potential **BC** breaks for existing applications as denormalization was previously done without serialization groups. * GraphQL: **BC** New syntax for the filters' arguments to preserve the order: `order: [{foo: 'asc'}, {bar: 'desc'}]` (#3468) * GraphQL: **BC** `operation` is now `operationName` to follow the standard (#3568) * GraphQL: **BC** `paginationType` is now `pagination_type` (#3614) * GraphQL: Add page-based pagination (#3175, #3517) * GraphQL: Allow formatting GraphQL errors based on exceptions (#3063) * GraphQL: Errors thrown from the GraphQL library can now be handled (#3632, #3643) * GraphQL: Possibility to add a custom description for queries, mutations and subscriptions (#3477, #3514) * GraphQL: Subscription support with Mercure (#3321) * GraphQL: Support for field name conversion (serialized name) (#3455, #3516) * Hydra: Sort entries in the API entrypoint (#3091) * Identifiers: Add Symfony Uid support (#3715) * IriConverter: **BC** Fix double encoding in IRIs - may cause breaking change as some characters no longer encoded in output (#3552) * JSON-LD: Add an `iri_only` attribute to simplify documents structure (useful when using Vulcain) (#3275) * Exception: Response error codes can be specified via the `ApiPlatform\Core\Exception\ErrorCodeSerializableInterface` (#2922) * Mercure: Add a `normalization_context` option in `mercure` attribute (#3772) * Messenger: Add a context stamp containing contextual data (#3157) * Metadata: Deprecate `InheritedPropertyMetadataFactory` (#3273) * Metadata: Improve and simplify identifiers management (#3825) * Metadata: Support the Symfony Serializer's `@Ignore` annotation (#3820) * Metadata: Support using annotations as PHP 8 attributes (#3869, #3868, #3851) * Metadata: Throw an error when no identifier is defined (#3871) * Metadata: Use `id` as default identifier if none provided (#3874) * MongoDB: Mercure support (#3290) * MongoDB: Possibility to add execute options (aggregate command fields) for a resource, like `allowDiskUse` (#3144) * OpenAPI: Add default values of PHP properties to the documentation (#2386) * OpenAPI: **BC** Replace all characters other than `[a-zA-Z0-9\.\-_]` to `.` in definition names to be compliant with OpenAPI 3.0 (#3669) * OpenAPI: Refactor OpenAPI v3 support, OpenAPI v2 (aka Swagger) is deprecated (#3407) * Order: Support default order for a specific custom operation (#3784) * PATCH: **BC** Support patching deep objects, previously new objects were created instead of updating current objects (#3847) * Router: UrlGenerator strategy configuration via `url_generation_strategy` (#3198) * Routing: Add stateless `ApiResource` attribute (#3436) * Security: Add support for access control rule on attributes (#3503) * Subresources: `resourceClass` can now be defined as a container parameter in XML and YAML definitions * Symfony: improved 5.x support with fewer deprecations (#3589) * Symfony: Allow using `ItemNormalizer` without Symfony SecurityBundle (#3801) * Symfony: Lazy load all commands (#3798) * Tests: adds a method to retrieve the CookieJar in the test Client `getCookieJar` * Tests: Fix the registration of the `test.api_platform.client` service when the `FrameworkBundle` bundle is registered after the `ApiPlatformBundle` bundle (#3928) * Validator: Add the violation code to the violation properties (#3857) * Validator: Allow customizing the validation error status code. **BC** Status code for validation errors is now 422, use `exception_to_status` to fallback to 400 if needed (#3808) * Validator: Autoconfiguration of validation groups generator via `ApiPlatform\Core\Validator\ValidationGroupsGeneratorInterface` * Validator: Deprecate using a validation groups generator service not implementing `ApiPlatform\Core\Bridge\Symfony\Validator\ValidationGroupsGeneratorInterface` (#3346) * Validator: Property validation through OpenAPI (#33329) * Validator: Query filters and parameters are validated (#1723) * `ExceptionInterface` now extends `\Throwable` (#3217) ## 2.5.10 * Hydra: only display `hydra:next` when the item total is strictly greater than the number of items per page (#3967) ## 2.5.9 * Fix a warning when preloading the `AbstractPaginator` class (#3827) * OpenAPI: prevent `additionalProp1` from showing in example values (#3888) * Varnish: fix a bug when passing an empty list of tags to the purger (#3827) * JSON Schema: mark `hydra:mapping` properties as nullable (#3877) ## 2.5.8 * PHP 8 support (#3791, #3745, #3855) * Metadata: Fix merging null values from annotations (#3711) * JSON-LD: Add missing `@type` from collection using output DTOs (#3699) * Cache: Improve `PurgeHttpCacheListener` performances (#3743) * Cache: Fix `VarnishPurger` max header length (#3843) * Identifiers: Do not denormalize the same identifier twice (#3762) * OpenAPI: Lazy load `SwaggerCommand` (#3802) * OpenAPI: Use Output class name instead of the Resource short name when available (#3741) * OpenAPI: Allow unset PathItem method (#4107) * Router: Replace baseurl only once (#3776) * Mercure: Publisher bug fixes (#3790, #3739) * Serializer: Catch NotNormalizableValueException to UnexpectedValueEception with inputs (#3697) * Doctrine: Do not add JOINs for filters without a value (#3703) * MongoDB: Escape search terms in `RegexFilter` (#3755) * Tests: Improve JSON Schema assertions (#3807, #3803, #3804, #3806, #3817, #3829, #3830) * Tests: Allow passing extra options in ApiTestClient (#3486) * Docs: Upgrade Swagger UI to version 3.37.2 (#3867) * Docs: Upgrade ReDoc to version 2.0.0-rc.45 (#3867) * Docs: Upgrade GraphiQL to version 15.3.0 (#3867) * Docs: Upgrade GraphQL Playground to version 1.7.26 (#3867) For compatibility reasons with Symfony 5.2 and PHP 8, we do not test anymore the integration with these legacy packages: - FOSUserBundle - NelmioApiDoc 2 ## 2.5.7 * Compatibility with Symfony 5.1 (#3589 and #3688) * Resource `Cache-Control` HTTP header can be private (#3543) * Doctrine: Fix missing `ManagerRegistry` class (#3684) * Doctrine: Order filter doesn't throw anymore with numeric key (#3673 and #3687) * Doctrine: Fix ODM check change tracking deferred (#3629) * Doctrine: Allow 2inflector version 2.0 (#3607) * OpenAPI: Allow subresources context to be added (#3685) * OpenAPI: Fix pagination documentation on subresources (#3678) * Subresource: Fix query when using a custom identifier (#3529 and #3671) * GraphQL: Fix relation types without Doctrine (#3591) * GraphQL: Fix DTO relations (#3594) * GraphQL: Compatibility with graphql-php version 14 (#3621 and #3654) * Docs: Upgrade Swagger UI to version 3.32.5 (#3693) * Docs: Upgrade ReDoc to version 2.0.0-rc.40 (#3693) * Docs: Upgrade GraphiQL to version 1.0.3 (#3693) * Docs: Upgrade GraphQL Playground to version 1.7.23 (#3693) ## 2.5.6 * Add support for Mercure 0.10 (#3584) * Allow objects without properties (#3544) * Fix Ramsey uuid denormalization (#3473) * Revert #3331 as it breaks backwards compatibility * Handle deprecations from Doctrine Inflector (#3564) * JSON Schema: Missing JSON-LD context from Data Transformers (#3479) * GraphQL: Resource with no operations should be available through relations (#3532) ## 2.5.5 * Filter: Improve the RangeFilter query in case the values are equals using the between operator (#3488) * Pagination: Fix bug with large values (#3451) * Doctrine: use the correct type within `setParameter` of the SearchFilter (#3331) * Allow `\Traversable` resources (#3463) * Hydra: `hydra:writable` => `hydra:writeable` (#3481) * Hydra: Show `hydra:next` only when it's available (#3457) * Swagger UI: Missing default context argument (#3443) * Swagger UI: Fix API docs path in swagger ui (#3475) * OpenAPI: Export with unescaped slashes (#3368) * OpenAPI: OAuth flows fix (#3333) * JSON Schema: Fix metadata options (#3425) * JSON Schema: Allow decoration (#3417) * JSON Schema: Add DateInterval type (#3351) * JSON Schema: Correct schema generation for many types (#3402) * Validation: Use API Platform's `ValidationException` instead of Symfony's (#3414) * Validation: Fix a bug preventing to serialize validator's payload (#3375) * Subresources: Improve queries when there's only one level (#3396) * HTTP: Location header is only set on POST with a 201 or between 300 and 400 (#3497) * GraphQL: Do not allow empty cursor values on `before` or `after` (#3360) * Bump versions of Swagger UI, GraphiQL and GraphQL Playground (#3510) ## 2.5.4 * Add a local cache in `ResourceClassResolver::getResourceClass()` * JSON Schema: Fix generation for non-resource class * Doctrine: Get class metadata only when it's needed in `SearchFilter` * GraphQL: Better detection of collection type ## 2.5.3 * Compatibility with Symfony 5 * GraphQL: Fix `hasNextPage` when `offset > itemsPerPage` ## 2.5.2 * Compatibility with Symfony 5 RC * Compatibility with NelmioCorsBundle 2 * Fix the type of `ApiResource::$paginationPartial` * Ensure correct return type from `AbstractItemNormalizer::normalizeRelation` ## 2.5.1 * Compatibility with Symfony 5 beta * Fix a notice in `SerializerContextBuilder` * Fix dashed path segment generation * Fix support for custom filters without constructors in the `@ApiFilter` annotation * Fix a bug that was preventing to disable Swagger/OpenAPI * Return a `404` HTTP status code instead of `500` whe the identifier is invalid (e.g.: invalid UUID) * Add links to the documentation in `@ApiResource` annotation's attributes to improve DX * JSON:API: fix pagination being ignored when using the `filter` query parameter * Elasticsearch: Allow multiple queries to be set * OpenAPI: Do not append `body` parameter if it already exists * OpenAPI: Fix removal of illegal characters in schema name for Amazon API Gateway * Swagger UI: Add missing `oauth2-redirect` configuration * Swagger UI: Allow changing the location of Swagger UI * GraphQL: Fix an error that was occurring when `SecurityBundle` was not installed * HTTP/2 Server Push: Push relations as `fetch` ## 2.5.0 * Fix BC-break when using short-syntax notation for `access_control` * Fix BC-break when no item operations are declared * GraphQL: Adding serialization group difference condition for `item_query` and `collection_query` types * JSON Schema: Fix command ## 2.5.0 beta 3 * GraphQL: Use different types (`MyTypeItem` and `MyTypeCollection`) only if serialization groups are different for `item_query` and `collection_query` (#3083) ## 2.5.0 beta 2 * Allow to not declare GET item operation * Add support for the Accept-Patch header * Make the `maximum_items_per_page` attribute consistent with other attributes controlling pagination * Allow to use a string instead of an array for serializer groups * Test: Add a helper method to find the IRI of a resource * Test: Add assertions for testing response against JSON Schema from API resource * GraphQL: Add support for multipart request so user can create custom file upload mutations (#3041) * GraphQL: Add support for name converter (#2765) ## 2.5.0 beta 1 * Add an HTTP client dedicated to functional API testing (#2608) * Add PATCH support (#2895) Note: with JSON Merge Patch, responses will skip null values. As this may break on some endpoints, you need to manually [add the `merge-patch+json` format](https://api-platform.com/docs/core/content-negotiation/#configuring-patch-formats) to enable PATCH support. This will be the default behavior in API Platform 3. * Add a command to generate json schemas `api:json-schema:generate` (#2996) * Add infrastructure to generate a JSON Schema from a Resource `ApiPlatform\Core\JsonSchema\SchemaFactoryInterface` (#2983) * Replaces `access_control` by `security` and adds a `security_post_denormalize` attribute (#2992) * Add basic infrastructure for cursor-based pagination (#2532) * Change ExistsFilter syntax to `exists[property]`, old syntax still supported see #2243, fixes its behavior on GraphQL (also related #2640). * Pagination with subresources (#2698) * Improve search filter id's management (#1844) * Add support of name converter in filters (#2751, #2897), filter signature in abstract methods has changed see b42dfd198b1644904fd6a684ab2cedaf530254e3 * Ability to change the Vary header via `cacheHeaders` attributes of a resource (#2758) * Ability to use the Query object in a paginator (#2493) * Compatibility with Symfony 4.3 (#2784) * Better handling of JsonSerializable classes (#2921) * Elasticsearch: Add pagination (#2919) * Add default, min, max specification in pagination parameter API docs (#3002) * Add a swagger version configuration option `swagger.versions` and deprecates the `enable_swagger` configuration option (#2998) * Order filter now documents `asc`/`desc` as enum (#2971) * GraphQL: **BC Break** Separate `query` resource operation attribute into `item_query` and `collection_query` operations so user can use different security and serialization groups for them (#2944, #3015) * GraphQL: Add support for custom queries and mutations (#2447) * GraphQL: Add support for custom types (#2492) * GraphQL: Better pagination support (backwards pagination) (#2142) * GraphQL: Support the pagination per resource (#3035) * GraphQL: Add the concept of *stages* in the workflow of the resolvers and add the possibility to disable them with operation attributes (#2959) * GraphQL: Add GraphQL Playground besides GraphiQL and add the possibility to change the default IDE (or to disable it) for the GraphQL endpoint (#2956, #2961) * GraphQL: Add a command to print the schema in SDL `api:graphql:export > schema.graphql` (#2600) * GraphQL: Improve serialization performance by avoiding calls to the `serialize` PHP function (#2576) * GraphQL: Allow to use a search and an exist filter on the same resource (#2243) * GraphQL: Refactor the architecture of the whole system to allow the decoration of useful services (`TypeConverter` to manage custom types, `SerializerContextBuilder` to modify the (de)serialization context dynamically, etc.) (#2772) Notes: Please read #2825 if you have issues with the behavior of Readable/Writable Link ## 2.4.7 * Fix passing context to data persisters' `remove` method * Ensure OpenAPI normalizers properly expose the date format * Add source maps for Swagger UI * Improve error message when filter class is not imported * Add missing autowiring alias for `Pagination` * Doctrine: ensure that `EntityManagerInterface` is used in data providers ## 2.4.6 * GraphQL: Use correct resource configuration for filter arguments of nested collection * Swagger UI: compatibility with Internet Explorer 11 * Varnish: Prevent cache miss by generating IRI for child related resources * Messenger: Unwrap exception thrown in handler for Symfony Messenger 4.3 * Fix remaining Symfony 4.3 deprecation notices * Prevent cloning non cloneable objects in `previous_data` * Return a 415 HTTP status code instead of a 406 one when a faulty `Content-Type` is sent * Fix `WriteListener` trying to generate IRI for non-resources * Allow extracting blank values from composite identifier ## 2.4.5 * Fix denormalization of a constructor argument which is a collection of non-resources * Allow custom operations to return a different class than the expected resource class ## 2.4.4 * Store the original data in the `previous_data` request attribute, and allow to access it in security expressions using the `previous_object` variable (useful for PUT and PATCH requests) * Fix resource inheritance handling * Fix BC break in `AbstractItemNormalizer` introduced in 2.4 * Fix serialization when using interface as resource * Basic compatibility with Symfony 4.3 ## 2.4.3 * Doctrine: allow autowiring of filter classes * Doctrine: don't use `fetchJoinCollection` on `Paginator` when not needed * Doctrine: fix a BC break in `OrderFilter` * GraphQL: input objects aren't nullable anymore (compliance with the Relay spec) * Cache: Remove some useless purges * Mercure: publish to Mercure using the default response format * Mercure: use the Serializer context * OpenAPI: fix documentation of the `PropertyFilter` * OpenAPI: fix generation of the `servers` block (also fixes the compatibility with Postman) * OpenAPI: skip not readable and not writable properties from the spec * OpenAPI: add the `id` path parameter for POST item operation * Serializer: add support for Symfony Serializer's `@SerializedName` metadata * Metadata: `ApiResource`'s `attributes` property now defaults to `null`, as expected * Metadata: Fix identifier support when using an interface as resource class * Metadata: the HTTP method is now always uppercased * Allow to disable listeners per operation (fix handling of empty request content) Previously, empty request content was allowed for any `POST` and `PUT` operations. This was an unsafe assumption which caused [other problems](https://github.com/api-platform/core/issues/2731). If you wish to allow empty request content, please add `"deserialize"=false` to the operation's attributes. For example: ```php `Resource-groupa_groupb`) - see https://github.com/api-platform/core/pull/1207 ## 2.0.11 * Ensure PHP 7.2 compatibility * Fix some bug regarding Doctrine joins * Let the `hydra_context` option take precedence over operation metadata * Fix relations handling by the non-hypermedia `ItemNormalizer` (raw JSON, XML) * Fix a bug in the JSON-LD context: should not be prefixed by `#` * Fix a bug regarding serialization groups in Hydra docs ## 2.0.10 * Performance improvement * Swagger: Allow non-numeric IDs (such as UUIDs) in URLs * Fix a bug when a composite identifier is missing * `ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter::extractProperties` now always return an array * Fix NelmioApiDocParser recursive relations ## 2.0.9 * Add support for Symfony 3.3 * Disable the partial eager loading by default * Fix support for ignored attributes in normalizers * Specify the `LEFT JOIN` clause for filter associations * Move the metadata from validator factory to the validator.xml file * Throw an exception when the number of items per page is 0 * Improve the Continuous Integration process ## 2.0.8 * Leverage serialization groups to eager load data * Fix the Swagger Normalizer to correctly support nested serialization groups * Use strict types * Get rid of the dependency to the Templating component * Explicitly add missing dependency to PropertyAccess component * Allow the operation name to be null in ResourceMetadata * Fix an undefined index error occurring in some cases when using sub types * Make the bundle working even when soft dependencies aren't installed * Fix serialization of multiple inheritance child types * Fix the priority of the FOSUSer's event listener * Fix the resource class resolver with using `\Traversable` values * Fix inheritance of property metadata for the Doctrine ORM property metadata factory * EagerLoadingExtension: Disable partial fetching if entity has subclasses * Refactoring and cleanup of the eager loading mechanism * Fix the handling of composite identifiers * Fix HAL normalizer when the context isn't serializable * Fix some quality problems found by PHPStan ## 2.0.7 * [security] Hide error's message in prod mode when a 500 error occurs (Api Problem format) * Fix sorting when eager loading is used * Allow eager loading when using composite identifiers * Don't use automatic eager loading when disabled in the config * Use `declare(strict_types=1)` and improve coding standards * Automatically refresh routes in dev mode when a resource is created or deleted ## 2.0.6 * Correct the XML Schema type generated for floats in the Hydra documentation ## 2.0.5 * Fix a bug when multiple filters are applied ## 2.0.4 * [security] Hide error's message in prod mode when a 500 error occurs * Prevent duplicate data validation * Fix filter Eager Loading * Fix the Hydra documentation for `ConstraintViolationList` * Fix some edge cases with the automatic configuration of Symfony * Remove calls to `each()` (deprecated since PHP 7.2) * Add a missing property in `EagerLoadingExtension` ## 2.0.3 * Fix a bug when handling invalid IRIs * Allow to have a property called id even in JSON-LD * Exclude static methods from AnnotationPropertyNameCollectionFactory * Improve compatibility with Symfony 2.8 ## 2.0.2 * Fix the support of the Symfony's serializer @MaxDepth annotation * Fix property range of relations in the Hydra doc when an IRI is used * Fix an error "api:swagger:export" command when decorating the Swagger normalizer * Fix an error in the Swagger documentation generator when a property has several serialization groups ## 2.0.1 * Various fixes related to automatic eager loading * Symfony 3.2 compatibility ## 2.0.0 * Full refactoring * Use PHP 7 * Add support for content negotiation * Add Swagger/OpenAPI support * Integrate Swagger UI * Add HAL support * Add API Problem support * Update the Hydra support to be in sync with the last version of the spec * Full rewrite of the metadata system (annotations, YAML and XML formats support) * Remove the event system in favor of the builtin Symfony kernel's events * Use the ADR pattern * Fix a ton of issues * `ItemDataproviderInterface`: `fetchData` is now in the context parameterer. `getItemFromIri` is now context aware [7f82fd7](https://github.com/api-platform/core/commit/7f82fd7f96bbb855599de275ffe940c63156fc5d) * Constants for event's priorities [2e7b73e](https://github.com/api-platform/core/commit/2e7b73e19ccbeeb8387fa7c4f2282984d4326c1f) * Properties mapping with XML/YAML is now possible [ef5d037](https://github.com/api-platform/core/commit/ef5d03741523e35bcecc48decbb92cd7b310a779) * Ability to configure and match exceptions with an HTTP status code [e9c1863](https://github.com/api-platform/core/commit/e9c1863164394607f262d975e0f00d51a2ac5a72) * Various fixes and improvements (SwaggerUI, filters, stricter property metadata) ## 1.1.1 * Fix a case typo in a namespace alias in the Hydra documentation ## 1.1.0 beta 2 * Allow to configure the default controller to use * Ability to add route requirements * Add a range filter * Search filter: add a case sensitivity setting * Search filter: fix the behavior of the search filter when 0 is provided as value * Search filter: allow using identifiers different from id * Exclude tests from classmap * Fix some deprecations and tests ## 1.1.0 beta 1 * Support Symfony 3.0 * Support nested properties in Doctrine filters * Add new `start` and `word_start` strategies to the Doctrine Search filter * Add support for abstract resources * Add a new option to totally disable Doctrine * Remove the ID attribute from the Hydra documentation when it is read only * Add method to avoid naming collision of DQL join alias and bound parameter name * Make exception available in the Symfony Debug Toolbar * Improve the Doctrine Paginator performance in some cases * Enhance HTTPS support and fix some bugs in the router * Fix some edge cases in the date and time normalizer * Propagate denormalization groups through relations * Run tests against all supported Symfony versions * Add a contribution documentation * Refactor tests * Check CS with StyleCI ## 1.0.1 * Avoid an error if the attribute isn't an array ## 1.0.0 * Extract the documentation in a separate repository * Add support for eager loading in collections ## 1.0.0 beta 3 * The Hydra documentation URL is now `/apidoc` (was `/vocab`) * Exceptions implements `Dunglas\ApiBundle\Exception\ExceptionInterface` * Prefix automatically generated route names by `api_` * Automatic detection of the method of the entity class returning the identifier when using Doctrine (previously `getId()` was always used) * New extension point in `Dunglas\ApiBundle\Doctrine\Orm\DataProvider` allowing to customize Doctrine paginator and performance optimization when using typical queries * New `Dunglas\ApiBundle\JsonLd\Event\Events::CONTEXT_BUILDER` event allowing to modify the JSON-LD context * Change HTTP status code from `202` to `200` for `PUT` requests * Ability to embed the JSON-LD context instead of embedding it ## 1.0.0 beta 2 * Preserve indexes when normalizing and denormalizing associative arrays * Allow setting default order for property when registering a `Doctrine\Orm\Filter\OrderFilter` instance