diff --git a/src/Bridge/Symfony/Bundle/Resources/config/api.xml b/src/Bridge/Symfony/Bundle/Resources/config/api.xml
index 67473b6fc91..eee710866e4 100644
--- a/src/Bridge/Symfony/Bundle/Resources/config/api.xml
+++ b/src/Bridge/Symfony/Bundle/Resources/config/api.xml
@@ -164,6 +164,7 @@
+
diff --git a/src/EventListener/WriteListener.php b/src/EventListener/WriteListener.php
index 26ae4829baa..9752cb66e43 100644
--- a/src/EventListener/WriteListener.php
+++ b/src/EventListener/WriteListener.php
@@ -14,6 +14,7 @@
namespace ApiPlatform\Core\EventListener;
use ApiPlatform\Core\Api\IriConverterInterface;
+use ApiPlatform\Core\Api\ResourceClassResolverInterface;
use ApiPlatform\Core\DataPersister\DataPersisterInterface;
use ApiPlatform\Core\Metadata\Resource\Factory\ResourceMetadataFactoryInterface;
use ApiPlatform\Core\Metadata\Resource\ToggleableOperationAttributeTrait;
@@ -36,12 +37,14 @@ final class WriteListener
private $dataPersister;
private $iriConverter;
private $resourceMetadataFactory;
+ private $resourceClassResolver;
- public function __construct(DataPersisterInterface $dataPersister, IriConverterInterface $iriConverter = null, ResourceMetadataFactoryInterface $resourceMetadataFactory = null)
+ public function __construct(DataPersisterInterface $dataPersister, IriConverterInterface $iriConverter = null, ResourceMetadataFactoryInterface $resourceMetadataFactory = null, ResourceClassResolverInterface $resourceClassResolver = null)
{
$this->dataPersister = $dataPersister;
$this->iriConverter = $iriConverter;
$this->resourceMetadataFactory = $resourceMetadataFactory;
+ $this->resourceClassResolver = $resourceClassResolver;
}
/**
@@ -90,6 +93,10 @@ public function onKernelView(GetResponseForControllerResultEvent $event): void
$hasOutput = \array_key_exists('class', $outputMetadata) && null !== $outputMetadata['class'] && $controllerResult instanceof $outputMetadata['class'];
}
+ if (null !== $this->resourceClassResolver && $hasOutput) {
+ $hasOutput = $this->resourceClassResolver->isResourceClass(\get_class($controllerResult));
+ }
+
if ($hasOutput) {
$request->attributes->set('_api_write_item_iri', $this->iriConverter->getIriFromItem($controllerResult));
}