Releases: api-platform/core
v3.2.24
What's Changed
- chore(symfony): deprecations (#6401) by @soyuka in #6405
- fix(state) handle empty request in read provider by @guillaume-sainthillier in #6403
- Lint container by @soyuka in #6409
- Fix endpoint in subresource guide by @alamirault in #6420
New Contributors
- @guillaume-sainthillier made their first contribution in #6403
Full Changelog: v3.2.23...v3.2.24
v3.3.5
v3.3.4
What's Changed
- fix(symfony): store original data without clone by @soyuka in #6367
- fix(validation): ValidationException causes TypeError exception when called with $code=null by @KernelMrex in #6375
- Add phpdoc to FilterInterface by @stephanvierkant in #6381
- test: PATCH on controller w/ dto by @soyuka in #6368
- fix(graphql): no validate on delete mutation by @soyuka in #6388
New Contributors
- @KernelMrex made their first contribution in #6375
Full Changelog: v3.3.3...v3.3.4
v3.2.23
What's Changed
- Fix typo on "Test your API" guide page by @alamirault in #6351
- fix(test): canonicalizing json arrays by @soyuka in #6386
New Contributors
- @alamirault made their first contribution in #6351
Full Changelog: v3.2.22...v3.2.23
v3.3.3
What's Changed
- fix(symfony): no read should throw on wrong uri variables by @soyuka in #6357
- fix(state): no location header without output by @soyuka in #6356
- fix(symfony): no read should not throw on wrong uri variables by @soyuka in #6359
- fix(graphql): resolver before validation by @soyuka in #6363
Full Changelog: v3.3.2...v3.3.3
v3.3.2
What's Changed
- fix(symfony): define use_symfony_listeners by @soyuka in #6344
- fix(symfony): set normalization context in request attributes by @soyuka in #6345
- fix(state): read without output by @soyuka in #6347
- docs: add guide for custom TagCollector service by @usu in #6348
- fix(symfony): use_symfony_listeners before registering services by @soyuka in #6350
Notes
You can remove the event_listeners_backward_compatibility_layer
flag and set use_symfony_listeners
instead. The use_symfony_listeners
should be true
if you use controllers or if you rely on Symfony event listeners.
Note that now flags like read
can be forced to true
if you want to call a Provider even on POST
operations. These are the rules we set up on runtime if no value has been set:
if (null === $operation->canValidate()) {
$operation = $operation->withValidate(!$request->isMethodSafe() && !$request->isMethod('DELETE'));
}
if (null === $operation->canRead()) {
$operation = $operation->withRead($operation->getUriVariables() || $request->isMethodSafe());
}
if (null === $operation->canDeserialize()) {
$operation = $operation->withDeserialize(\in_array($operation->getMethod(), ['POST', 'PUT', 'PATCH'], true));
}
Previously listeners did the checks before reading our flags and you could not force the values.
Full Changelog: v3.3.0...v3.3.1
Full Changelog: v3.3.0...v3.3.2
v3.3.1
What's Changed
- fix(symfony): define use_symfony_listeners by @soyuka in #6344
- fix(symfony): set normalization context in request attributes by @soyuka in #6345
- fix(state): read without output by @soyuka in #6347
- docs: add guide for custom TagCollector service by @usu in #6348
Notes
You can remove the event_listeners_backward_compatibility_layer
flag and set use_symfony_listeners
instead. The use_symfony_listeners
should be true
if you use controllers or if you rely on Symfony event listeners.
Note that now flags like read
can be forced to true
if you want to call a Provider even on POST
operations. These are the rules we set up on runtime if no value has been set:
if (null === $operation->canValidate()) {
$operation = $operation->withValidate(!$request->isMethodSafe() && !$request->isMethod('DELETE'));
}
if (null === $operation->canRead()) {
$operation = $operation->withRead($operation->getUriVariables() || $request->isMethodSafe());
}
if (null === $operation->canDeserialize()) {
$operation = $operation->withDeserialize(\in_array($operation->getMethod(), ['POST', 'PUT', 'PATCH'], true));
}
Previously listeners did the checks before reading our flags and you could not force the values.
Full Changelog: v3.3.0...v3.3.1
v3.3.0
Read the API Platform 3.3 blog post for details on the 3.3 release.
Fixes
- fix(graphql): use normalization context to get item from IRI by @bkosun in #5915
- fix(doctrine): SearchFilterInterface case insensitive constants @soyuka in #6066
- fix(symfony)!: context stamp not serializable because of request object by @MariusJam in #6323
- fix(jsonapi): correct data path by @GwendolenLynch in #6273
- fix(jsonapi): return empty data array for empty relation by @GwendolenLynch in #6270
- fix(jsonapi): add missing "included" schema parts by @GwendolenLynch in #6277
- fix(jsonapi): exit loop when relationship class is found by @GwendolenLynch in #6320
- fix(jsonapi): re-add continue once relation is determined by @GwendolenLynch in #6325
- fix(metadata): index operations by @GwendolenLynch in #6272
- fix(graphql): nested collection for mongo by @jotwea in #6174
Features
- feat: allow to extend link handling by @soyuka in #6061
- feat(elasticsearch): filtering on nested fields by @jonnyeom in #5835
- feat: enable swagger UI deep linking by @coldic3 in #6051
- feat(graphql): support Enum collections by @jotwea in #5955
- feat(serializer): collect cache tags using a TagCollector by @usu in #5758
- feat(graphql): nested Collections by @jotwea in #6038
- feat(subresource): Link Security by @KDederichs in #5290
- feat(symfony): request and view kernel listeners by @soyuka in #6102
- feat(metadata): headers configuration by @soyuka in #6074
- feat: Paginators for Doctrine Collection & Selectable by @priyadi in #6153
- feat(graphql): partial pagination for page based pagination by @xavierleune in #6120
- feat: improve ApiProperty::security using property name by @vincentchalamon in #5853
- feat(symfony): add
getOperation
Expression Language function on Mercure topics by @vincentchalamon in #5854 - feat(openapi): disable response override by @soyuka in #6221
- feat(openapi): add webhook - openapi by @alli83 in #5873
- feat(metadata): allow \Stringable for security parameters by @aurimasrim in #6095
- feat(hydra): read hydra:property from ApiProperty::jsonLdContext by @soyuka in #6240
- feat(jsonschema): JSON:API schema factory by @GwendolenLynch in #6250
- feat(serializer): update MissingConstructorArgumentsException message by @ERuban in #5902
- feat(metadata): Parameter implementation by @soyuka in #6246
- feat(serializer): attribute Parameter by @soyuka in #6247
- feat(doctrine): parameter filter extension by @soyuka in #6248
Notes
You can remove the event_listeners_backward_compatibility_layer
flag and set use_symfony_listeners
instead.
If you use controllers you should use:
api_platform:
use_symfony_listeners: true
The use_symfony_listeners
should be true
if you use controllers or if you rely on Symfony event listeners.
Note that now flags like read
can be forced to true
if you want to call a Provider even on POST
operations. These are the rules we set up on runtime if no value has been set:
if (null === $operation->canValidate()) {
$operation = $operation->withValidate(!$request->isMethodSafe() && !$request->isMethod('DELETE'));
}
if (null === $operation->canRead()) {
$operation = $operation->withRead($operation->getUriVariables() || $request->isMethodSafe());
}
if (null === $operation->canDeserialize()) {
$operation = $operation->withDeserialize(\in_array($operation->getMethod(), ['POST', 'PUT', 'PATCH'], true));
}
Previously listeners did the checks before reading our flags and you could not force the values. You can now force an operation state, for example:
<?php
#[Delete(validate: true)]
#[Post(read: true)]
class Book {}
A new interface ApiPlatform\Serializer\TagCollectorInterface
allows to collect cache tags (IRIs) during serialization instead of using API Platform defaults.
An experimental feature (#5290) gives the ability to use security
on sub resource links.
These namespaces are deprecated:
ApiPlatform\Api
ApiPlatform\Exception
ApiPlatform\Problem
ApiPlatform\Action
ApiPlatform\Util
Most of the classes have moved to ApiPlatform\Metadata
.
Full Changelog: v3.2.22...v3.3.0
v3.2.22
What's Changed
- fix(serializer): uriTemplate wrong cache usage in hal format by @usu in #6313
- fix(graphql): check inheritance in ResolverProvider by @jotwea in #6314
- fix(metadata): allow extracting routeName from XML config by @JacquesDurand in #6329
- fix(doctrine): Doctrine 3 ApiPlatform\Doctrine\EventListener\PurgeHttpCacheListener uses deprecated ClassUtils class. by @wtfzdotnet in #6331
New Contributors
- @wtfzdotnet made their first contribution in #6331
Full Changelog: v3.2.21...v3.2.22