widget_engine-8.x-1.2/tests/src/Traits/EntityAddWidgetFieldTrait.php

tests/src/Traits/EntityAddWidgetFieldTrait.php
<?php

namespace Drupal\Tests\widget_engine\Traits;

use Drupal\field\Entity\FieldStorageConfig;
use Drupal\field\Entity\FieldConfig;

/**
 * Provides methods to add widget field to some entity type.
 *
 * This trait is meant to be used only by test classes.
 */
trait EntityAddWidgetFieldTrait {

  /**
   * Add Entity reference field linked to Widget entity type.
   */
  public function entityAddWidgetField($entity_type, $bundle, $field_name, $field_label, $field_widget, $field_widget_settings = []) {
    // Add or remove the body field, as needed.
    $field_storage = FieldStorageConfig::loadByName('widget', $field_name);
    if (empty($field_storage)) {
      $field_storage = FieldStorageConfig::create([
        'field_name' => $field_name,
        'entity_type' => $entity_type,
        'type' => 'entity_reference',
        'cardinality' => '-1',
        'settings' => [
          'target_type' => 'widget',
        ],
      ]);
      $field_storage->save();
    }
    $field = FieldConfig::loadByName('widget', $bundle, $field_name);
    if (empty($field)) {
      $field = FieldConfig::create([
        'field_storage' => $field_storage,
        'bundle' => $bundle,
        'label' => $field_label,
        'settings' => [
          'handler' => 'default',
        ],
      ]);
      $field->save();

      if (!$field_widget_settings) {
        $field_widget_settings = [
          'allow_existing' => TRUE,
        ];
      }

      // Assign widget settings for the 'default' form mode.
      \Drupal::entityTypeManager()->getStorage('entity_form_display')->load($entity_type . '.' . $bundle . '.default')
        ->setComponent(
              $field_name, [
                'type' => $field_widget,
                'settings' => $field_widget_settings,
              ])
        ->save();

      // Assign display settings for the 'default' and 'teaser' view modes.
      \Drupal::entityTypeManager()->getStorage('entity_view_display')->load($entity_type . '.' . $bundle . '.default')
        ->setComponent(
              $field_name, [
                'type' => 'entity_reference_entity_view',
              ])
        ->save();

      // The teaser view mode is created by the Standard profile and therefore
      // might not exist.
      $view_modes = \Drupal::service('entity_display.repository')->getViewModes($entity_type);
      if (isset($view_modes['teaser'])) {
        \Drupal::entityTypeManager()->getStorage('entity_view_display')->load($entity_type . '.' . $bundle . '.teaser')
          ->setComponent(
                $field_name, [
                  'label' => 'hidden',
                  'type' => 'entity_reference_entity_view',
                ])
          ->save();
      }
    }

    return $field;
  }

}

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

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