Skip to content

Releases: api-platform/core

v3.3.5

29 May 05:50
v3.3.5
b5a93fb
Compare
Choose a tag to compare

What's Changed

  • fix(symfony): documentation request _format by @soyuka in #6390
  • tests: constraint Url needs "requireTld" by @soyuka in #6393

Full Changelog: v3.3.4...v3.3.5

v3.3.4

24 May 16:44
v3.3.4
2f4ecc8
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v3.3.3...v3.3.4

v3.2.23

24 May 16:41
v3.2.23
6bd7a71
Compare
Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v3.2.22...v3.2.23

v3.3.3

10 May 11:17
v3.3.3
59dca65
Compare
Choose a tag to compare

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

03 May 09:38
v3.3.2
6fa4bb7
Compare
Choose a tag to compare

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

03 May 08:32
v3.3.1
58e4ed4
Compare
Choose a tag to compare
v3.3.1 Pre-release
Pre-release

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

29 Apr 13:43
v3.3.0
3b8a006
Compare
Choose a tag to compare

Read the API Platform 3.3 blog post for details on the 3.3 release.

Fixes

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

29 Apr 13:38
v3.2.22
04474e4
Compare
Choose a tag to compare

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

Full Changelog: v3.2.21...v3.2.22

v3.1.29

29 Apr 13:34
v3.1.29
db72a60
Compare
Choose a tag to compare

What's Changed

  • fix(doctrine): test Doctrine Types:ARRAY existence before using it by @fmata in #6333

Full Changelog: v3.1.28...v3.1.29

v3.3.0-beta.2

13 Apr 07:21
v3.3.0-beta.2
1a120ee
Compare
Choose a tag to compare
v3.3.0-beta.2 Pre-release
Pre-release

What's Changed

Full Changelog: v3.3.0-beta.1...v3.3.0-beta.2