首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从ajax表单中保存实体

问如何从ajax表单中保存实体
EN

Drupal用户
提问于 2020-01-11 01:02:44
回答 1查看 612关注 0票数 0

我在运行Drupal 8.8.x

The问题

通过AJAX提交表单时,不会保存实体。示例:

Build表单

代码语言:javascript
复制
public function buildForm(array $form, FormStateInterface $form_state, EntityInterface $entity = NULL) {
  if($entity) {
    $this->entity = $entity;


    $form['element'] = [
      '#type' => 'textfield',
      '#title' => $this->t('My title'),
      '#name' => 'element',
      '#ajax' => [
         'event' => 'focusout',
         'callback' => [$this, 'myCallback'],
         'disable-refocus' => TRUE
      ]
    ];
  }

  return $form;
}

Submit表单

代码语言:javascript
复制
public function submitForm(array &$form, FormStateInterface $form_state) {
 $element = $form_state->getTriggeringElement()['#name'];
 $value = $form_state->getValue($element);

 $this->entity->set($element, $value);
 $this->entity->save();
}

我已经确认$element和$value是正确的键和值。但是,当我保存实体时,什么都不会发生。数据库中没有任何更新。控制台或看门狗中没有发出错误。

如果有人知道可能是什么问题,我会很感激你的一些见解!:)

EN

回答 1

Drupal用户

回答已采纳

发布于 2020-01-11 11:43:24

Drupal 8不再缓存Ajax表单,因此无法在初始表单构建中获得表单对象的属性。见默认情况下使用#ajax绕过表单缓存。

窗体仅作为呈现形式缓存。将实体id放在隐藏的表单元素中,以便在保存之前加载该实体。如果使用来自实体的默认值,则将实体缓存标记添加到表单中。

或者考虑从普通表单API表单切换到实体表单。

票数 1
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/290021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档