Как вы изменяете ссылки на сущности на форме в пользовательском действии Ajax в Drupal 8?
Я добавил пользовательскую кнопку в форму:
$form['actions']['autotag_content'] = [
'#type' => 'button',
'#value' => 'Autotag Content',
'#ajax' => [
'callback' => ['\Drupal\taxonomy_migrate\taggerService', 'tagContent'],
'wrapper' => ['block-adminimal-theme-content'],
'progress' => [
'type' => 'throbber',
'message' => 'Tagging content',
],
],
];
Затем в обратном вызове я хочу добавить или удалить сущности из поля ссылки на сущность в форме. Затем он будет отправлен обратно в браузер и повторно обработан. Я не хочу, чтобы изменения были сохранены, я просто хочу, чтобы они были заполнены в форме, и тогда пользователь может принять изменения.
Ради этого примера я упростил это, чтобы просто продемонстрировать смысл. Я хотел бы добавить две ссылки на сущности к field_tax_subjects и сделать повторное отображение формы внешнего интерфейса. В настоящее время форма интерфейса обновляется, но не отражает изменения
public static function tagContent(array &$form, FormStateInterface &$form_state) {
$node = $form_state->getFormObject()->getEntity();
$node->field_tax_subjects[] = 12345;
$node->field_tax_subjects[] = 23456;
$form = \Drupal::service('entity.form_builder')->getForm($node);
$form_state->setRebuild();
return $form;
}
1 ответ
Мой ответ только на тот случай, если ваш AJAX работает, потому что в вашем вопросе у вас нет полного кода формы, а также не ясна его форма узла или что-то еще
Если ваш ajax работает, вам нужно только исправить, как установить значение для поля ссылки на сущность и поданной ссылки на термин
для ссылки на сущность и термин
public static function tagContent(array &$form, FormStateInterface &$form_state) {
$node = $form_state->getFormObject()->getEntity();
// for entity refrence
$node->field_tax_subjects[]['target_id'] = 12345;
$node->field_tax_subjects[]['target_id'] = 23456;
// for term reference
//$node->field_tax_subjects[]['tid'] = 12345;
//$node->field_tax_subjects[]['tid'] = 23456;
$form = \Drupal::service('entity.form_builder')->getForm($node);
$form_state->setRebuild();
return $form;
}
Надеюсь, это поможет вам
СПАСИБО