Skip to content

Commit 79de868

Browse files
authored
fix: Union types in controller throws exception (#88)
1 parent 467b4f2 commit 79de868

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

src/ValueResolver/ContentTypeValueResolver.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,16 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable
3636
return [];
3737
}
3838

39-
if ($argument->getType() !== $request->attributes->get('_storyblok_content_type')) {
39+
if (null === $argument->getType()) {
40+
return [];
41+
}
42+
43+
$types = \array_filter(
44+
\explode('|', $argument->getType()),
45+
static fn (string $type) => $request->attributes->get('_storyblok_content_type') === $type,
46+
);
47+
48+
if (\count($types) === 0) {
4049
return [];
4150
}
4251

tests/Unit/ValueResolver/ContentTypeValueResolverTest.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use PHPUnit\Framework\Attributes\Test;
1818
use PHPUnit\Framework\TestCase;
1919
use Storyblok\Bundle\ContentType\ContentTypeStorage;
20+
use Storyblok\Bundle\Tests\Double\ContentType\AnotherContentType;
2021
use Storyblok\Bundle\Tests\Double\ContentType\SampleContentType;
2122
use Storyblok\Bundle\Tests\Util\FakerTrait;
2223
use Storyblok\Bundle\ValueResolver\ContentTypeValueResolver;
@@ -74,4 +75,21 @@ public function resolveStorageIsEmpty(): void
7475

7576
self::assertEmpty($resolver->resolve($request, new ArgumentMetadata($faker->word(), SampleContentType::class, false, false, null)));
7677
}
78+
79+
#[Test]
80+
public function resolveWithUnionType(): void
81+
{
82+
$faker = self::faker();
83+
$storage = new ContentTypeStorage();
84+
$storage->setContentType($expected = new SampleContentType([]));
85+
86+
$resolver = new ContentTypeValueResolver($storage);
87+
88+
$request = new Request();
89+
$request->attributes->set('_storyblok_content_type', $expected::class);
90+
91+
$unionType = SampleContentType::class.'|'.AnotherContentType::class;
92+
93+
self::assertSame([$expected], $resolver->resolve($request, new ArgumentMetadata($faker->word(), $unionType, false, false, null)));
94+
}
7795
}

0 commit comments

Comments
 (0)