Skip to content

Commit 4f3a47b

Browse files
Merge pull request #113 from eliashaeussler/fix/request-attribute-default
[BUGFIX] Include default value passed to `$request->getAttribute()`
2 parents 9861cdc + bfb0286 commit 4f3a47b

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

src/Type/RequestDynamicReturnTypeExtension.php

+17-5
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,28 @@ public function getTypeFromMethodCall(
4848
): Type
4949
{
5050
$argument = $methodCall->getArgs()[0] ?? null;
51+
$defaultArgument = $methodCall->getArgs()[1] ?? null;
5152

52-
if ($argument === null || !($argument->value instanceof \PhpParser\Node\Scalar\String_)) {
53-
return ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType();
53+
if ($argument === null
54+
|| !($argument->value instanceof \PhpParser\Node\Scalar\String_)
55+
|| !isset($this->requestGetAttributeMapping[$argument->value->value])
56+
) {
57+
$type = ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType();
58+
59+
if ($defaultArgument === null) {
60+
return $type;
61+
}
62+
63+
return TypeCombinator::union($type, $scope->getType($defaultArgument->value));
5464
}
5565

56-
if (isset($this->requestGetAttributeMapping[$argument->value->value])) {
57-
return TypeCombinator::addNull($this->typeStringResolver->resolve($this->requestGetAttributeMapping[$argument->value->value]));
66+
$type = $this->typeStringResolver->resolve($this->requestGetAttributeMapping[$argument->value->value]);
67+
68+
if ($defaultArgument === null) {
69+
return TypeCombinator::addNull($type);
5870
}
5971

60-
return ParametersAcceptorSelector::selectSingle($methodReflection->getVariants())->getReturnType();
72+
return TypeCombinator::union($type, $scope->getType($defaultArgument->value));
6173
}
6274

6375
public function isMethodSupported(

tests/Unit/Type/data/request-get-attribute-return-types.php

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Psr\Http\Message\ServerRequestInterface;
66
use TYPO3\CMS\Core\Http\NormalizedParams;
7+
use TYPO3\CMS\Core\Site\Entity\NullSite;
78
use TYPO3\CMS\Core\Site\Entity\Site;
89
use TYPO3\CMS\Core\Site\Entity\SiteLanguage;
910
use function PHPStan\Testing\assertType;
@@ -21,6 +22,7 @@ public function getAttributeTests(ServerRequestInterface $request): void
2122
);
2223
assertType(SiteLanguage::class . '|null', $request->getAttribute('language'));
2324
assertType(Site::class . '|null', $request->getAttribute('site'));
25+
assertType(NullSite::class . '|' . Site::class, $request->getAttribute('site', new NullSite()));
2426
assertType(NormalizedParams::class . '|null', $request->getAttribute('normalizedParams'));
2527
assertType('1|2|4|8|16|null', $request->getAttribute('applicationType'));
2628
assertType('FlowdGmbh\\MyProject\\Http\\MyAttribute|null', $request->getAttribute('myCustomAttribute'));

0 commit comments

Comments
 (0)