You are here

public function GeneralFieldSerializer::onSerializeContentField in Acquia Content Hub 8.2

Directly reference the field's value property.

Parameters

\Drupal\acquia_contenthub\Event\SerializeCdfEntityFieldEvent $event: The content entity field serialization event.

File

src/EventSubscriber/SerializeContentField/GeneralFieldSerializer.php, line 32

Class

GeneralFieldSerializer
Subscribes to entity field serialization to handle basic field values.

Namespace

Drupal\acquia_contenthub\EventSubscriber\SerializeContentField

Code

public function onSerializeContentField(SerializeCdfEntityFieldEvent $event) {
  $acceptable_types = [
    'integer',
    'boolean',
    'string',
  ];
  if (in_array($event
    ->getField()
    ->getFieldDefinition()
    ->getType(), $acceptable_types)) {
    $this
      ->setFieldMetaData($event);
    $data = [];

    /** @var \Drupal\Core\Entity\TranslatableInterface $entity */
    $entity = $event
      ->getEntity();
    foreach ($entity
      ->getTranslationLanguages() as $langcode => $language) {
      $field = $event
        ->getFieldTranslation($langcode);

      // Set the translation value to represent null field data.
      if (empty(count($field))) {
        $data['value'][$langcode] = [];
        continue;
      }
      foreach ($field as $item) {
        if ($field
          ->getFieldDefinition()
          ->getFieldStorageDefinition()
          ->getCardinality() == FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) {
          $data['value'][$langcode][] = $item
            ->getValue()['value'];
        }
        else {
          $data['value'][$langcode] = $item
            ->getValue()['value'];
        }
      }
    }
    $event
      ->setFieldData($data);
    $event
      ->stopPropagation();
  }
}