Releases: api-platform/core
v4.3.1
What's Changed
- chore(github): fix dispatch-demo-update on release by @vincentchalamon in #7842
- fix(validator): fallback to message when detail is uninitialized by @soyuka in #7844
- fix(symfony): do not exclude resources from DI by @VincentLanglet in #7847
- fix(validator): skip ValidateProcessor when ObjectMapper is not used by @Renrhaf in #7848
- fix(serializer): evaluate ApiProperty security on input DTOs by @soyuka in #7852
- fix(hydra): use compact IRI for owl:onProperty and Collection @id in DocumentationNormalizer by @soyuka in #7849
- fix(doctrine): reset nested_properties_info for non-nested properties in FreeTextQueryFilter by @soyuka in #7850
- cs: typo in deprecation message for 'xkey' config by @melany-mai in #7851
New Contributors
- @melany-mai made their first contribution in #7851
Full Changelog: v4.3.0...v4.3.1
v4.2.22
What's Changed
- chore(github): fix dispatch-demo-update on release by @vincentchalamon in #7842
- fix(serializer): evaluate ApiProperty security on input DTOs by @soyuka in #7852
- fix(hydra): use compact IRI for owl:onProperty and Collection @id in DocumentationNormalizer by @soyuka in #7849
- cs: typo in deprecation message for 'xkey' config by @melany-mai in #7851
New Contributors
- @melany-mai made their first contribution in #7851
Full Changelog: v4.2.21...v4.2.22
v4.3.0
Highlights
MCP (Model Context Protocol) Support
- Introduce
api-platform/mcpcomponent (#7703) - MCP bundle tool integration (#7595)
- Collection support for MCP (#7724)
- Laravel MCP support (#7709)
Scalar API Reference Documentation
- Scalar is now available as an alternative documentation UI alongside Swagger UI (#7817)
Security
isGrantedis now evaluated before the provider, preventing unnecessary database queries on unauthorized requests (#7500)
Doctrine Filters
- UUID filter (#7628) with nested relation support (#7759)
- ComparisonFilter decorator for range filtering (#7760) with
ne(not equal) operator (#7814) caseSensitiveoption for PartialSearchFilter (#7675)- ODM SortFilter and nested property support (#7780)
- Support relations on filters (#7711)
- Readonly entities automatically lose PUT & PATCH operations (#7453)
Elasticsearch
Other Notable Features
- Defaults parameters (#7758)
- Laravel object mapper (#7704)
- JSON Schema normalization/denormalization with attributes (#7629)
- JSON:API entity identifiers instead of IRIs as resource id (#7702)
SkipAutoconfigureattribute for Laravel (#7467)- LDP-compliant
AllowandAccept-Postresponse headers (#6917) - Cache operation metadata factory (#7516)
gen_idglobal configuration option (#7775)- Preserve key option in CollectionNormalizer (#7721)
- UUID/ULID parameter validation (#7649)
Breaking Changes
- JSON-LD
@typewithoutputanditemUriTemplate: uses the resource class name instead of the output DTO class name - Doctrine filters require explicit
property(#7681): throwsInvalidArgumentExceptionif missing (unless you use a:propertyplaceholder) - Readonly entities lose PUT & PATCH (#7453): clients will receive 404 instead of processing the request
Behavioral Changes
- Hydra class
@iduses#ShortName(#7771): replaces schema.org type URIs — clients should expect class@idand property range changes - Scalar UI enabled by default (#7817): disable with
enable_scalar: falseif unwanted
See the full changelog with all bug fixes and detailed upgrade notes on the 4.3 branch CHANGELOG.md.
New Contributors
- @hotfix31 made their first contribution in #7450
- @BySplashGm made their first contribution in #7513
- @bonroyage made their first contribution in #7776
- @olinox14 made their first contribution in #7775
Full Changelog: v4.2.21...v4.3.0
v4.2.21
v4.2.21
Bug fixes
- 20ced5fca fix(laravel): clear SkolemIriConverter state between requests (#7838)
- 2b2b7bca2 fix(filter): use correct type for int-backed enums in BackedEnumFilter
- 42a2d7fc6 fix(symfony): register DateTimeValueObjectTransformer for JsonStreamer (#7839)
- 63e6b57f8 fix(openapi): correct redocly openapi errors (#7834)
- 6a472a2db fix(jsonapi): swap arguments in DefinitionNameFactory::create() call
- bbfd4cafa fix(filter): do not nest array while generating default schema (#7832)
- c20a41c20 fix(symfony): clear SkolemIriConverter state between requests via ResetInterface (#7829)
- d6ecbe122 fix(serializer): Use serializer when denormalizing relation inside Input (#7830)
- da6232468 fix(metadata): allow GraphQL-only resources without identifiers (#3975) (#7836)
- f4002902a fix(state): on creation, give expected class to object mapper (#7795)
v4.3.0-beta.2
What's Changed
- fix(odm): partial pagination limit the documents entering $facet by @divine in #7822
- chore: bump sub-components dependencies to ^4.3 by @soyuka in #7820
Full Changelog: v4.3.0-beta.1...v4.3.0-beta.2
v4.2.20
What's Changed
- fix(openapi): allow Operations to override global options in getPaginationParameters by @jamesisaac in #7807
- fix(laravel): exclude .blade.php files from recursive class scan by @Jellyfrog in #7813
- fix(laravel): do not exclude custom primary keys matching HasMany foreign keys by @Jellyfrog in #7810
- fix(symfony): make enable_docs a master switch for disabling documentation by @soyuka in #7806
- fix(odm): partial pagination limit the documents entering $facet by @divine in #7822
New Contributors
- @Jellyfrog made their first contribution in #7813
Full Changelog: v4.2.19...v4.2.20
v4.3.0-beta.1
What's Changed
- fix(serializer): apply API Platform name converter to input/output DTOs by @soyuka in #7779
- fix(JsonSchema): avoid schema name collision when an operation name is already used by another class by @wuchen90 in #7778
- fix(metadata): sort parameters by priority after pattern expansion by @soyuka in #7788
- fix(serializer): prevent api_platform_output context from leaking to nested non-resource objects by @soyuka in #7787
- fix(validator): missing required properties when using GroupSequence by @VincentLanglet in #7784
- ci: php 8.5 (#7585) by @soyuka in #7786
- fix(symfony): allow toggling GraphQL Playground to ensure BC by @bkosun in #7793
- feat(serializer): option to preserve key in CollectionNormalizer by @VincentLanglet in #7721
- fix(validator): handle nested groups and group sequences by @VincentLanglet in #7791
- Fix Hydra example type - use @type prefix per JSON-LD spec by @Copilot in #7768
- feat(laravel): split render logic from error handler by @bonroyage in #7790
- fix(serializer): report all missing constructor arguments in instantiateObject by @soyuka in #7805
- Feature support entity identfiers to become JSON:API semantics compliant by @elfin-sbreuers in #7702
- chore: mcp-bundle:^0.5 by @soyuka in #7809
- fix(openapi): allow Operations to override global options in getPaginationParameters by @jamesisaac in #7807
- feat(doctrine): ComparisonFilter decorator for range filtering by @soyuka in #7760
- fix(laravel): exclude .blade.php files from recursive class scan by @Jellyfrog in #7813
- feat(doctrine): ne (not equal) operator for ComparisonFilter by @soyuka in #7814
- feat(elasticsearch): OpenSearch support by @hotfix31 in #7811
- feat(doctrine): ODM SortFilter and nested property support for parameter-based filters by @soyuka in #7780
- fix(laravel): do not exclude custom primary keys matching HasMany foreign keys by @Jellyfrog in #7810
- fix(symfony): make enable_docs a master switch for disabling documentation by @soyuka in #7806
- fix(jsonapi): wrong variable name during merge by @soyuka in #7816
- feat: defaults parameters by @Maxcastel in #7758
New Contributors
- @Jellyfrog made their first contribution in #7813
Full Changelog: v4.3.0-alpha.2...v4.3.0-beta.1
v4.2.19
v4.2.18
What's Changed
- fix(metadata): sort parameters by priority after pattern expansion by @soyuka in #7788
- fix(serializer): prevent api_platform_output context from leaking to nested non-resource objects by @soyuka in #7787
- fix(validator): missing required properties when using GroupSequence by @VincentLanglet in #7784
- ci: php 8.5 (#7585) by @soyuka in #7786
- fix(symfony): allow toggling GraphQL Playground to ensure BC by @bkosun in #7793
- fix(validator): handle nested groups and group sequences by @VincentLanglet in #7791
- Fix Hydra example type - use @type prefix per JSON-LD spec by @Copilot in #7768
Full Changelog: v4.2.17...v4.2.18
v4.3.0-alpha.2
What's Changed
- fix(jsonld): restore item_uri_template @type resolution after 4.2 merge by @soyuka in #7764
- Various fixes by @soyuka in #7765
- fix(elasticsearch): mono-repo v9 support by @GeLoLabs in #7766
- fix: remove extra empty lines insertion in SymfonyServiceClassConstantFixer by @Maxcastel in #7761
- fix(state): handle partial pagination with object mapper by @soyuka in #7769
- test(openapi): add openapi test for normalization with attributes by @Maxcastel in #7772
- fix(hydra): hide search key when there is parameter without filter by @VincentLanglet in #7773
- fix(hydra): unique class @id with subClassOf for semantic types by @soyuka in #7771
- feat(doctrine): add nested relation support to IriFilter and UuidFilter by @soyuka in #7759
- fix(symfony): publish mercure updates for all resources of an entity by @soyuka in #7774
- Use values from ProblemExceptionInterface by @bonroyage in #7776
- fix(symfony): use AsCommand description parameter for console commands by @soyuka in #7763
- feat(serializer): global defaults.normalization_context.gen_id configuration option by @olinox14 in #7775
- fix(doctrine): enforce api-platform/serializer dependency by @soyuka in #7781
⚠️ Notes
Hydra class @id now always uses #ShortName (#7771): Hydra documentation classes now consistently use #ShortName as their @id instead of schema.org type URIs (e.g. schema:Product). This properly resolves class identifier collisions when multiple resources shared the same semantic type, which previously caused api-doc-parser conflation. Semantic types configured via types are now exposed through rdfs:subClassOf. Clients should expect class @id and property range changes in the Hydra documentation if resources had custom types configured.
New Contributors
- @bonroyage made their first contribution in #7776
- @olinox14 made their first contribution in #7775
Full Changelog: v4.3.0-alpha.1...v4.3.0-alpha.2