Рейтинг:0

Создайте пользовательскую форму с полем формы сущности

флаг de

У меня есть функция перехода с Drupal 7 на Drupal 9. Это позволяет мне создавать пользовательскую форму, состоящую из статических полей, которые я определяю в коде своего модуля, и полей, динамически извлекаемых из объекта.

Он работал с «функцией ctools_field_invoke_field», которая опирается на модуль Chaos Tools. Эта функция сама основана на родной функции Drupal "field_default_form".

Согласно моим исследованиям, эта функция не была перенесена в Drupal 9. Можно ли найти аналог? Стоит ли разрабатывать эту функцию с нуля?

Мой предыдущий код:

// Если язык не указан, используйте язык сайта по умолчанию.
$ параметры = массив (
  'язык' => field_valid_language($langcode),
  'по умолчанию' => ИСТИНА,
);

// Добавляем в форму
ctools_include('поля');
$field_instance = field_info_instance($entity_type, $field_name, $bundle);
return (массив) ctools_field_invoke_field($field_instance, 'form', $entity_type, $entity, $form, $form_state, $options);
Рейтинг:0
флаг ss

Аналогичной функции я тоже не нашел. Похоже, его не существует. Однако вот как этого можно добиться в формах Drupal 8/9:

$entity = $this->entityTypeManager->getStorage('узел')->create([
  'тип' => 'статья'
]);
$form_state->set('сущность', $сущность);


/** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $form_display */
$form_display = $this->entityTypeManager->getStorage('entity_form_display')->load('node.article.custom_form_display');
$form_state->set('form_display', $form_display);

foreach ($form_display->getComponents() as $name => $component) {
  $widget = $form_display->getRenderer($name);
  если (!$виджет) {
    Продолжить;
  }

  $items = $entity->get($name);
  $items->filterEmptyItems();
  $form[$name] = $widget->form($items, $form, $form_state);
  $form[$name]['#access'] = $items->access('edit');
}

Этот код был взят из следующей статьи: https://www.webomelette.com/how-render-entity-field-widgets-inside-custom-form-drupal-8

Я не связан с этим, но лично рекомендую прочитать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.