function system_entity_form_display_presave

Implements hook_ENTITY_TYPE_presave() for entity_form_display entities.

Provides a BC layer for modules providing old configurations.

@todo Remove this hook in Drupal 9.0.x https://www.drupal.org/project/drupal/issues/3086388

File

core/modules/system/system.module, line 1434

Code

function system_entity_form_display_presave(EntityFormDisplayInterface $display) {
  /** @var \Drupal\Core\Field\WidgetPluginManager $field_widget_manager */
  $field_widget_manager = \Drupal::service('plugin.manager.field.widget');
  foreach ($display->getComponents() as $field_name => $component) {
    if (empty($component['type'])) {
      continue;
    }
    $plugin_definition = $field_widget_manager->getDefinition($component['type'], FALSE);
    if (!is_a($plugin_definition['class'], EntityReferenceAutocompleteWidget::class, TRUE)) {
      continue;
    }
    if (!isset($component['settings']['match_limit'])) {
      @trigger_error(sprintf('Any entity_reference_autocomplete component of an entity_form_display must have a match_limit setting. The %s field on the %s form display is missing it. This BC layer will be removed before 9.0.0. See https://www.drupal.org/node/2863188', $field_name, $display->id()), E_USER_DEPRECATED);
      $component['settings']['match_limit'] = 10;
      $display->setComponent($field_name, $component);
    }
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.