1<?php 2 3namespace Drupal\Tests\image\Kernel; 4 5use Drupal\field\Entity\FieldConfig; 6use Drupal\field\Entity\FieldStorageConfig; 7 8/** 9 * Provides a helper method for creating Image fields. 10 */ 11trait ImageFieldCreationTrait { 12 13 /** 14 * Create a new image field. 15 * 16 * @param string $name 17 * The name of the new field (all lowercase), exclude the "field_" prefix. 18 * @param string $type_name 19 * The node type that this field will be added to. 20 * @param array $storage_settings 21 * (optional) A list of field storage settings that will be added to the 22 * defaults. 23 * @param array $field_settings 24 * (optional) A list of instance settings that will be added to the instance 25 * defaults. 26 * @param array $widget_settings 27 * (optional) Widget settings to be added to the widget defaults. 28 * @param array $formatter_settings 29 * (optional) Formatter settings to be added to the formatter defaults. 30 * @param string $description 31 * (optional) A description for the field. Defaults to ''. 32 */ 33 protected function createImageField($name, $type_name, $storage_settings = [], $field_settings = [], $widget_settings = [], $formatter_settings = [], $description = '') { 34 FieldStorageConfig::create([ 35 'field_name' => $name, 36 'entity_type' => 'node', 37 'type' => 'image', 38 'settings' => $storage_settings, 39 'cardinality' => !empty($storage_settings['cardinality']) ? $storage_settings['cardinality'] : 1, 40 ])->save(); 41 42 $field_config = FieldConfig::create([ 43 'field_name' => $name, 44 'label' => $name, 45 'entity_type' => 'node', 46 'bundle' => $type_name, 47 'required' => !empty($field_settings['required']), 48 'settings' => $field_settings, 49 'description' => $description, 50 ]); 51 $field_config->save(); 52 53 /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */ 54 $display_repository = \Drupal::service('entity_display.repository'); 55 $display_repository->getFormDisplay('node', $type_name) 56 ->setComponent($name, [ 57 'type' => 'image_image', 58 'settings' => $widget_settings, 59 ]) 60 ->save(); 61 62 $display_repository->getViewDisplay('node', $type_name) 63 ->setComponent($name, [ 64 'type' => 'image', 65 'settings' => $formatter_settings, 66 ]) 67 ->save(); 68 69 return $field_config; 70 } 71 72} 73