У меня есть пользовательский объект, который зависит от объекта пользователя. На самом деле, это даже в зависимости от того, что я чувствовал, что имеет смысл отображать форму моей сущности в форме профиля пользователя:
Проблема, с которой я сейчас сталкиваюсь, заключается в следующем; Есть 2 кнопки сохранения. И если это не так уж плохо, кнопка сохранения для пользователя (нижняя) больше не работает, а кнопка сохранения с белой меткой сохраняет только объект с белой меткой.
Форма превращается в форму пользователя следующим образом:
function whitelabel_form_user_form_alter(&$form, FormStateInterface $form_state) {
$whitelabel = WhiteLabel::load(1);
$whitelabel_form = \Drupal::service('entity.manager')
->getFormObject('whitelabel', 'default')
->setEntity($whitelabel);
$form['whitelabel'] = array(
'#type' => 'details',
'#title' => t('White label settings'),
'#open' => TRUE,
'form' => \Drupal::formBuilder()->getForm($whitelabel_form),
);
}
Я надеялся перетасовать некоторые параметры в $whitelabel_form
массиве (который работал в Drupal 7), но этот массив огромен, и я не смог найти нужные кнопки и обработчик отправки.
Вопрос в том, можно ли это сделать? И каков будет рекомендуемый способ сделать это?
Ответы:
Вместо того, чтобы пытаться делать что-то свое, вы должны попробовать модуль Inline Entity Form . Этот модуль сделан для этого конкретного случая (создание / редактирование сущностей в формах сущностей).
Я знаю, что для улучшения рабочего процесса в Drupal Commerce была проделана большая работа, а это значит, что это должно работать хорошо. Я не проверял это сам, но, поскольку Drupal Commerce зависит от него и в Drupal 8, он должен быть достаточно стабильным.
Модуль работает путем добавления виджета в поле ссылки на сущность, которое создает форму, поэтому он должен быть в значительной степени подключен и играть. Единственное требование - чтобы у пользователя была ссылка на ваш пользовательский объект.
источник
Я считаю, что это должно быть возможно. К сожалению, сегодня у меня нет времени на написание кода, однако, я думаю, вы должны помнить следующее:
form_id
иform_build_id
используемые Drupal, чтобы распознать, какая форма была отправлена.unset($sub_form['actions'])
прежде, чем вы добавляете вложенную форму в основную форму.#tree
для формы, чтобы вы могли поймать значения подформы в отдельном кармане в переменной POST. Например,$form['#tree'] = TRUE; $form['sub-form'] = $sub_form;
это сделает ваши значения формы доступными в$form_state['values']['sub-form']
.sub-form
значения$form_state['values']
(надеюсь, вы понимаете, что я имею в виду).Надеюсь, поможет! Звучит как адский эксперимент! Удачи.
источник
form_build_id
,form_token
,form_id
иactions
сделал кнопку исчезают и снова сделал «внешний вид» работы. Я поиграю с этим еще немного и дам вам знать, как это получилось.$form_state ['values']
(ключи элемента формы пусты). Вероятно, это невозможно (пока), но я надеюсь когда-нибудь выяснить это.Теоретический ответ (тот, который не работает, но это самый близкий я получил). Размещение здесь для справки и отправной точкой для других.
Измените форму пользователя.
Отправить обработчик:
источник