src/Controller/EntityResource.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Controller/EntityResource.php b/src/Controller/EntityResource.php index 1e44b16..77e17fe 100644 --- a/src/Controller/EntityResource.php +++ b/src/Controller/EntityResource.php @@ -40,13 +40,13 @@ use Drupal\jsonapi\ResourceResponse; use Drupal\jsonapi\ResourceType\ResourceType; use Drupal\jsonapi\ResourceType\ResourceTypeRepositoryInterface; use Drupal\jsonapi\Revisions\ResourceVersionRouteEnhancer; -use Drupal\jsonapi\Serializer\Serializer; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Drupal\Core\Http\Exception\CacheableBadRequestHttpException; use Symfony\Component\HttpKernel\Exception\ConflictHttpException; use Symfony\Component\Serializer\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Exception\UnexpectedValueException; +use Symfony\Component\Serializer\SerializerInterface; /** * Process all entity requests. @@ -151,7 +151,7 @@ class EntityResource { * @param \Symfony\Component\Serializer\SerializerInterface|\Symfony\Component\Serializer\Normalizer\DenormalizerInterface $serializer * The JSON:API serializer. */ - public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, LinkManager $link_manager, ResourceTypeRepositoryInterface $resource_type_repository, RendererInterface $renderer, EntityRepositoryInterface $entity_repository, IncludeResolver $include_resolver, EntityAccessChecker $entity_access_checker, FieldResolver $field_resolver, Serializer $serializer) { + public function __construct(EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $field_manager, LinkManager $link_manager, ResourceTypeRepositoryInterface $resource_type_repository, RendererInterface $renderer, EntityRepositoryInterface $entity_repository, IncludeResolver $include_resolver, EntityAccessChecker $entity_access_checker, FieldResolver $field_resolver, SerializerInterface $serializer) { $this->entityTypeManager = $entity_type_manager; $this->fieldManager = $field_manager; $this->linkManager = $link_manager; @@ -274,8 +274,6 @@ class EntityResource { * Thrown when the patched entity does not pass validation. */ public function patchIndividual(ResourceType $resource_type, EntityInterface $entity, Request $request) { - $parsed_entity = $this->deserialize($resource_type, $request, JsonApiDocumentTopLevel::class); - $body = Json::decode($request->getContent()); $data = $body['data']; if ($data['id'] != $entity->uuid()) { @@ -288,6 +286,8 @@ class EntityResource { $data += ['attributes' => [], 'relationships' => []]; $field_names = array_merge(array_keys($data['attributes']), array_keys($data['relationships'])); + $parsed_entity = $this->deserialize($resource_type, $request, JsonApiDocumentTopLevel::class); + array_reduce($field_names, function (EntityInterface $destination, $field_name) use ($resource_type, $parsed_entity) { $this->updateEntityField($resource_type, $parsed_entity, $destination, $field_name); return $destination;