$entity_type, 'field_name' => $name, 'type' => 'file', 'settings' => $storage_settings, 'cardinality' => !empty($storage_settings['cardinality']) ? $storage_settings['cardinality'] : 1, ]); $field_storage->save(); $this->attachFileField($name, $entity_type, $bundle, $field_settings, $widget_settings); return $field_storage; } /** * Attaches a file field to an entity. * * @param string $name * The name of the new field (all lowercase), exclude the "field_" prefix. * @param string $entity_type * The entity type this field will be added to. * @param string $bundle * The bundle this field will be added to. * @param array $field_settings * A list of field settings that will be added to the defaults. * @param array $widget_settings * A list of widget settings that will be added to the widget defaults. */ public function attachFileField($name, $entity_type, $bundle, $field_settings = [], $widget_settings = []) { $field = [ 'field_name' => $name, 'label' => $name, 'entity_type' => $entity_type, 'bundle' => $bundle, 'required' => !empty($field_settings['required']), 'settings' => $field_settings, ]; FieldConfig::create($field)->save(); entity_get_form_display($entity_type, $bundle, 'default') ->setComponent($name, [ 'type' => 'file_generic', 'settings' => $widget_settings, ]) ->save(); // Assign display settings. entity_get_display($entity_type, $bundle, 'default') ->setComponent($name, [ 'label' => 'hidden', 'type' => 'file_default', ]) ->save(); } }