Skip to content

Commit b6080d4

Browse files
committed
Merge 4.1
2 parents 1862d03 + c3297c0 commit b6080d4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+733
-67
lines changed

CHANGELOG.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
11
# Changelog
22

3+
## v4.1.9
4+
5+
### Bug fixes
6+
7+
* [4dd0cdfc4](https://github.com/api-platform/core/commit/4dd0cdfc4a7f4cc73e7e67a49ee790ed1aaf5707) fix(doctrine): support integer-backed enums in BackedEnumFilter (#7127)
8+
* [70a922573](https://github.com/api-platform/core/commit/70a9225737bece18ad4b66b8ac636c38b2a1008a) fix: error formats (#7148)
9+
* [723d041c4](https://github.com/api-platform/core/commit/723d041c47467d8be0d8a0f20431da9de0a87c5a) fix(metadata): xml PHPize HTTP cache headers (#7140)
10+
* [d3d0ca21b](https://github.com/api-platform/core/commit/d3d0ca21bd45a8383e3e51166a65162be93655bf) fix(serializer): invalid uri variable 400 response (#7135)
11+
12+
## v4.1.8
13+
14+
### Bug fixes
15+
16+
* [0cd9b9f70](https://github.com/api-platform/core/commit/0cd9b9f7002829a6238ed4a1731c3a123c4a91c4) fix: backport handling of union/intersection type in item normalizer (#7106)
17+
* [0fc0904b9](https://github.com/api-platform/core/commit/0fc0904b9409e81041d4d5ae48d699f3360208fc) fix(metadata): correct class to exclude defaults (#7088)
18+
* [5145a8383](https://github.com/api-platform/core/commit/5145a8383c8e234012b957a36701ec824774a817) fix: filtering not using strategy set in attribute when strategy not set per property (#7136)
19+
* [613bb5b75](https://github.com/api-platform/core/commit/613bb5b75fe6cbc79c99e06bcbd664fc3f25c167) fix(doctrine): filters schema for dates and numbers (#7131)
20+
* [ed1ef2594](https://github.com/api-platform/core/commit/ed1ef2594e72180e5fe153e762809e3c22b29e7f) fix(state): specify :property parameter properties (#7110)
21+
* [f55606b01](https://github.com/api-platform/core/commit/f55606b01179703fb4be44f1b66a36136852f154) fix(serializer): throw NotNormalizableValueException when resource not found or invalid IRI on denormalization
22+
* [3faf5d4b4](https://github.com/api-platform/core/commit/3faf5d4b44f7c39d7a9d6ecbcfdf90f7061f1b6f) fix(doctrine): order filter instance service
23+
* [0ff950f37](https://github.com/api-platform/core/commit/0ff950f376345ff6a6d39a202b8bef15c3e423d2) fix: type info deprecations to baseline
24+
* [d93d580a1](https://github.com/api-platform/core/commit/d93d580a1dbaf6a1af5f05f0ebde2f7b68d75d25) fix: command name deprecation
25+
326
## v4.1.7
427

528
### Bug fixes

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@
115115
"symfony/serializer": "^6.4 || ^7.0",
116116
"symfony/translation-contracts": "^3.3",
117117
"symfony/type-info": "v7.3.0-BETA1",
118-
"symfony/web-link": "^6.4 || ^7.0",
118+
"symfony/web-link": "^6.4 || ^7.1",
119119
"willdurand/negotiation": "^3.1"
120120
},
121121
"require-dev": {

phpunit.xml.dist

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
<directory>.</directory>
3939
</include>
4040
<exclude>
41+
<directory>tests</directory>
4142
<directory>features</directory>
4243
<directory>vendor</directory>
4344
<file>.php-cs-fixer.dist.php</file>

src/Doctrine/Common/Filter/BackedEnumFilterTrait.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ trait BackedEnumFilterTrait
3232
use PropertyHelperTrait;
3333

3434
/**
35-
* @var array<string, string>
35+
* @var array<string, class-string>
3636
*/
3737
private array $enumTypes;
3838

@@ -80,6 +80,14 @@ abstract protected function isBackedEnumField(string $property, string $resource
8080

8181
private function normalizeValue($value, string $property): mixed
8282
{
83+
$firstCase = $this->enumTypes[$property]::cases()[0] ?? null;
84+
if (
85+
\is_int($firstCase?->value)
86+
&& false !== filter_var($value, \FILTER_VALIDATE_INT)
87+
) {
88+
$value = (int) $value;
89+
}
90+
8391
$values = array_map(fn (\BackedEnum $case) => $case->value, $this->enumTypes[$property]::cases());
8492

8593
if (\in_array($value, $values, true)) {

src/Doctrine/Common/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"require": {
2626
"php": ">=8.2",
2727
"api-platform/metadata": "^4.1",
28-
"api-platform/state": "^4.1",
28+
"api-platform/state": "^4.1.8",
2929
"doctrine/collections": "^2.1",
3030
"doctrine/common": "^3.2.2",
3131
"doctrine/persistence": "^3.2"

src/Doctrine/Odm/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"php": ">=8.2",
2828
"api-platform/doctrine-common": "^4.1",
2929
"api-platform/metadata": "^4.1",
30-
"api-platform/state": "^4.1",
30+
"api-platform/state": "^4.1.8",
3131
"doctrine/mongodb-odm": "^2.10",
3232
"symfony/property-info": "^6.4 || ^7.1",
3333
"symfony/type-info": "v7.3.0-BETA1"

src/Doctrine/Orm/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"php": ">=8.2",
2727
"api-platform/doctrine-common": "^4.1",
2828
"api-platform/metadata": "^4.1",
29-
"api-platform/state": "^4.1",
29+
"api-platform/state": "^4.1.8",
3030
"doctrine/orm": "^2.17 || ^3.0",
3131
"symfony/property-info": "^6.4 || ^7.1"
3232
},

src/Laravel/Eloquent/Extension/FilterQueryExtension.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public function apply(Builder $builder, array $uriVariables, Operation $operatio
5353
continue;
5454
}
5555

56+
// most eloquent filters work with only a single value
57+
if (\is_array($values) && array_is_list($values) && 1 === \count($values)) {
58+
$values = current($values);
59+
}
60+
5661
$filter = $filterId instanceof FilterInterface ? $filterId : ($this->filterLocator->has($filterId) ? $this->filterLocator->get($filterId) : null);
5762
if ($filter instanceof FilterInterface) {
5863
$builder = $filter->apply($builder, $values, $parameter, $context + ($parameter->getFilterContext() ?? []));

src/Laravel/Eloquent/Filter/JsonApi/SortFilterParameterProvider.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ public function provide(Parameter $parameter, array $parameters = [], array $con
2828
$parameters = $operation->getParameters();
2929
$properties = $parameter->getExtraProperties()['_properties'] ?? [];
3030
$value = $parameter->getValue();
31+
32+
// most eloquent filters work with only a single value
33+
if (\is_array($value) && array_is_list($value) && 1 === \count($value)) {
34+
$value = current($value);
35+
}
36+
3137
if (!\is_string($value)) {
3238
return $operation;
3339
}

src/Laravel/Exception/ErrorHandler.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use ApiPlatform\Laravel\ApiResource\Error;
1717
use ApiPlatform\Laravel\Controller\ApiPlatformController;
18+
use ApiPlatform\Metadata\Exception\InvalidUriVariableException;
1819
use ApiPlatform\Metadata\Exception\ProblemExceptionInterface;
1920
use ApiPlatform\Metadata\Exception\StatusAwareExceptionInterface;
2021
use ApiPlatform\Metadata\HttpOperation;
@@ -192,7 +193,7 @@ private function getStatusCode(?HttpOperation $apiOperation, ?HttpOperation $err
192193
return $exception->getStatusCode();
193194
}
194195

195-
if ($exception instanceof RequestExceptionInterface) {
196+
if ($exception instanceof RequestExceptionInterface || $exception instanceof InvalidUriVariableException) {
196197
return 400;
197198
}
198199

0 commit comments

Comments
 (0)