Перейти к основному содержанию

Как встроить веб-форму?

Может быть, вам нужно программно встроить Webform в контроллер или даже в функцию предварительной обработки?

Встроить как объект Webform

Класс веб-форм расширяет базовый класс ConfigEntityBundleBase, как и любой другой тип сущности.
Таким образом, вы можете использовать методы, которые может использовать любой объект.

Чтобы загрузить объект веб-формы:

$my_webform_machinename = 'check the name in webform configuration';
$my_form = \Drupal::entityTypeManager()->getStorage('webform')->load($my_webform_machinename);

После создания вашей веб-формы вы можете изменить некоторые настройки или изменить значения по умолчанию.
Добавьте, например, имя по умолчанию:

$values = ['data' => ['name' => 'Custom Name']];
$my_form->getSubmissionForm($values);

Чтобы отобразить эту веб-форму как массив визуализации и добавить ее к выходным данным, просто используйте этот код:

$output = \Drupal::entityTypeManager()
      ->getViewBuilder('webform')
      ->view($my_form);

Вставить как объект блока

Если вам не нужно изменять веб-форму перед ее визуализацией, вы также можете загрузить веб-форму как блок, если он доступен.
Таким же образом, чтобы загрузить Webform, потому что Block также являются Entity

$block = \Drupal\block\Entity\Block::load('myBlockID');
    $block_content = \Drupal::entityTypeManager()
       ->getViewBuilder('block')
       ->view($block);

Внедрить как массив рендеринга с новой веб-формой типа элемента

$output['your_form_id'] = [
  '#type' => 'webform',
  '#webform' => 'your_form_id',
  '#default_data' => ['name' => 'Custom Name'],
];