我在运行Drupal 8.8.x
The问题
通过AJAX提交表单时,不会保存实体。示例:
Build表单
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表单
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是正确的键和值。但是,当我保存实体时,什么都不会发生。数据库中没有任何更新。控制台或看门狗中没有发出错误。
如果有人知道可能是什么问题,我会很感激你的一些见解!:)
发布于 2020-01-11 11:43:24
Drupal 8不再缓存Ajax表单,因此无法在初始表单构建中获得表单对象的属性。见默认情况下使用#ajax绕过表单缓存。
窗体仅作为呈现形式缓存。将实体id放在隐藏的表单元素中,以便在保存之前加载该实体。如果使用来自实体的默认值,则将实体缓存标记添加到表单中。
或者考虑从普通表单API表单切换到实体表单。
https://drupal.stackexchange.com/questions/290021
复制相似问题