multistep_form_framework-8.x-1.x-dev/src/EntityWidgetsTrait.php

src/EntityWidgetsTrait.php
<?php

namespace Drupal\multistep_form_framework;

use Drupal\Core\DependencyInjection\DependencySerializationTrait;
use Drupal\Core\Entity\EntityTypeManager;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;

/**
 * Provides helper methods to interact with form widgets.
 */
trait EntityWidgetsTrait {

  use DependencySerializationTrait;

  /**
   * Array of widgets.
   *
   * @var \Drupal\Core\Field\WidgetInterface[]
   */
  protected $widgets = [];

  /**
   * Entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManager
   */
  protected $entityTypeManager;

  /**
   * Get widget for the field.
   *
   * @param \Drupal\Core\Field\FieldItemListInterface $field
   *   The field from which build widget.
   * @param string $form_view_mode
   *   Form view mode.
   *
   * @return \Drupal\Core\Field\WidgetInterface
   *   Widget.
   */
  protected function getWidget(FieldItemListInterface $field, string $form_view_mode = 'default') {
    $entity = $field->getEntity();
    $entity_type = $entity->getEntityTypeId();
    $entity_bundle = $entity->bundle();
    $definition = $field->getFieldDefinition();
    $identifier = $entity_type . $entity_bundle . $definition->getName();
    if (isset($this->widgets[$identifier])) {
      return $this->widgets[$identifier];
    }

    $displays = $this->getEntityTypeManager()
      ->getStorage('entity_form_display')
      ->loadByProperties([
        'bundle' => $entity_bundle,
        'mode' => $form_view_mode,
        'targetEntityType' => $entity_type,
      ]);

    /** @var \Drupal\Core\Entity\Entity\EntityFormDisplay $display */
    $display = current($displays);

    $this->widgets[$identifier] = $display->getRenderer($definition->getName());

    return $this->widgets[$identifier];
  }

  /**
   * Gets form for the widget.
   *
   * @param \Drupal\Core\Field\FieldItemListInterface $field
   *   Field.
   * @param array $form
   *   Form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   Form state.
   * @param string $form_view_mode
   *   Form operation.
   *
   * @return array
   *   Widget's form.
   */
  protected function getWidgetForm(FieldItemListInterface $field, array &$form, FormStateInterface $form_state, string $form_view_mode = 'default'): array {
    $form += ['#parents' => []];

    $widget = $this->getWidget($field, $form_view_mode);
    return $widget->form($field, $form, $form_state);
  }

  /**
   * Extract form values.
   *
   * @param \Drupal\Core\Field\FieldItemListInterface $field
   *   Field.
   * @param array $form
   *   Form.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   Form state.
   * @param string $form_view_mode
   *   Form operation.
   */
  protected function extractFormValues(FieldItemListInterface $field, array $form, FormStateInterface $form_state, string $form_view_mode = 'default') {
    $widget = $this->getWidget($field, $form_view_mode);
    $widget->extractFormValues($field, $form, $form_state);
  }

  /**
   * Entity type manager.
   *
   * @return \Drupal\Core\Entity\EntityTypeManager
   *   Entity type manager.
   */
  public function getEntityTypeManager(): EntityTypeManager {
    if (isset($this->entityTypeManager)) {
      return $this->entityTypeManager;
    }

    $this->entityTypeManager = \Drupal::entityTypeManager();

    return $this->entityTypeManager;
  }

  /**
   * Set entity type manager.
   *
   * @param \Drupal\Core\Entity\EntityTypeManager $entity_type_manager
   *   Config factory.
   */
  public function setEntityTypeManager(EntityTypeManager $entity_type_manager): void {
    $this->entityTypeManager = $entity_type_manager;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc