我在表单中添加了一个自定义按钮:
$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;
}
答案 0 :(得分: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;
}
希望这有助于你
感谢