Вы здесь

Как вывести несколько копий одной формы на странице?

0

Разрабы, подскажите, может кто уже реализовывал. Ситуация - есть кастомная форма из модуля, с сабмитом и скртытым значением (type="hidden").


class CustomForm extends FormBase { # Форма public function buildForm(array $form, FormStateInterface $form_state, $node = NULL) { # NID ноды $nid = $node['node']->id(); $form['nid'] = array( '#type' => 'hidden', '#value' => $nid, ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Button', '#name' => 'custom_form' .$nid ); return $form; } # ID формы public function getFormId() { return 'custom_form'; } # ф-я валидации public function validateForm(array &$form, FormStateInterface $form_state) { } # действия по сабмиту public function submitForm(array &$form, FormStateInterface $form_state) { kint($form_state); die; } }

Соответственно задача, необходимо вывести данную форму в ноде:

function template_preprocess_node(&$node){
  $form = \Drupal::formBuilder()->getForm('Drupal\custom_form\Form\CustomForm', $node);
  $node['content']['custom_form'] = render($form);
}

Собственно здесь все просто. Проблема в том, что по сабмиту в $form_state передаются значения последней отрендеренной формы для ноды, т.е. есть список из нод с NID от 1 до 10. Если посмотреть по HTML коду в дереве, то для каждой формы в каждой ноде указано правильное значение hidden (тупо содержит NID ноды). А дальше по любому сабмиту любой ноды в $form_state передается hidden последней отрендеренной формы, а не тот который был указан. Понимаю что скорее проблема скорее в formBuilder(), но завис над решением - может есть идеи у кого ?

Версия Drupal: 
8.x
Категория: 
Form API
Вопрос задан 14.09.2017 - 08:39

$node['content']['custom_form'] = render($form);

Тут render() не нужен. Твиг потом сам его вызовет.

Комментарий оставлен 14.09.2017 - 15:51

Ответы

0

В D7 для этого был hook_forms()
Но в D8 он удалён https://www.drupal.org/node/2188851

Суть в том, что в вашем способе вывода форм - они все одинаковый ID получают.

Ответ дан 17.09.2017 - 12:23