EntityNormalizerTrait.php in JSON:API Extras 8.2
File
src/Normalizer/EntityNormalizerTrait.php
View source
<?php
namespace Drupal\jsonapi_extras\Normalizer;
use Drupal\jsonapi\ResourceType\ResourceType;
trait EntityNormalizerTrait {
protected function prepareInput(array $data, ResourceType $resource_type) {
$field_storage_definitions = \Drupal::service('entity_field.manager')
->getFieldStorageDefinitions($resource_type
->getEntityTypeId());
$data_internal = [];
foreach ($data as $public_field_name => $field_value) {
$internal_name = $resource_type
->getInternalName($public_field_name);
if (!$resource_type
->isFieldEnabled($internal_name)) {
continue;
}
$enhancer = $resource_type
->getFieldEnhancer($public_field_name, 'publicName');
if (isset($field_storage_definitions[$internal_name])) {
$field_storage_definition = $field_storage_definitions[$internal_name];
if ($field_storage_definition
->getCardinality() === 1) {
try {
$field_value = $enhancer ? $enhancer
->transform($field_value) : $field_value;
} catch (\TypeError $exception) {
$field_value = NULL;
}
}
elseif (is_array($field_value)) {
foreach ($field_value as $key => $individual_field_value) {
try {
$field_value[$key] = $enhancer ? $enhancer
->transform($individual_field_value) : $individual_field_value;
} catch (\TypeError $exception) {
$field_value[$key] = NULL;
}
}
}
}
$data_internal[$internal_name] = $field_value;
}
return parent::prepareInput($data_internal, $resource_type);
}
protected function getResourceConfig($entity_type_id, $bundle_id) {
$id = sprintf('%s--%s', $entity_type_id, $bundle_id);
$resource_config = \Drupal::entityTypeManager()
->getStorage('jsonapi_resource_config')
->load($id);
return $resource_config;
}
}