$entity =
reset($entities);
// If the entity type is translatable, ensure we return the proper
// translation object for the current context.
if ($entity instanceof TranslatableInterface &&
$entity->
isTranslatable()) { // @see https://www.drupal.org/project/drupal/issues/2624770
$entity =
$this->entityRepository->
getTranslationFromContext($entity, NULL,
['operation' => 'entity_upcast'
]);
// JSON:API always has only one method per route.
$method =
$defaults[RouteObjectInterface::ROUTE_OBJECT
]->
getMethods()[0
];
if (in_array($method,
['PATCH', 'DELETE'
], TRUE
)) { $current_content_language =
$this->languageManager->
getCurrentLanguage(LanguageInterface::TYPE_CONTENT
)->
getId();
if ($method === 'DELETE'
&& (!
$entity->
isDefaultTranslation() ||
$entity->
language()->
getId() !==
$current_content_language)) { throw new MethodNotAllowedHttpException(['GET'
], 'Deleting a resource object translation is not yet supported. See https://www.drupal.org/docs/8/modules/jsonapi/translations.'
);
} if ($method === 'PATCH' &&
$entity->
language()->
getId() !==
$current_content_language) { $available_translations =
implode(', ',
array_keys($entity->
getTranslationLanguages()));
throw new MethodNotAllowedHttpException(['GET'
],
sprintf('The requested translation of the resource object does not exist, instead modify one of the translations that do exist: %s.',
$available_translations));
} } } return $entity;
} return NULL;
}