diff --git a/core/modules/hal/hal.services.yml b/core/modules/hal/hal.services.yml index 4e89841..21225dc 100644 --- a/core/modules/hal/hal.services.yml +++ b/core/modules/hal/hal.services.yml @@ -1,4 +1,9 @@ services: + serializer.normalizer.entity_reference_item_file.hal: + class: Drupal\hal\Normalizer\EntityReferenceItemFileNormalizer + arguments: ['@rest.link_manager', '@serializer.entity_resolver'] + tags: + - { name: normalizer, priority: 20 } serializer.normalizer.entity_reference_item.hal: class: Drupal\hal\Normalizer\EntityReferenceItemNormalizer arguments: ['@rest.link_manager', '@serializer.entity_resolver'] diff --git a/core/modules/hal/src/Normalizer/EntityReferenceItemFileNormalizer.php b/core/modules/hal/src/Normalizer/EntityReferenceItemFileNormalizer.php new file mode 100644 index 0000000..89c37c7 --- /dev/null +++ b/core/modules/hal/src/Normalizer/EntityReferenceItemFileNormalizer.php @@ -0,0 +1,45 @@ +transliterate($filename, LanguageInterface::LANGCODE_DEFAULT, '_'); + + // Build the file scheme to save the file. + $settings = $context['target_instance']->getFieldDefinition()->getSettings(); + $file_scheme = $settings['uri_scheme'] . '://' . $settings['file_directory']; + + // Save the file. + if (file_prepare_directory($file_scheme, FILE_CREATE_DIRECTORY)) { + $file = file_save_data($file, $file_scheme . '/' . $filename); + if (!empty($file)) { + return array('target_id' => $file->id(), 'display' => (int) $settings['display_field']); + } + } + } + return NULL; + } + +}