如何从Ajax表单中保存实体 -- 8 领域 和 entities 领域 和 forms 领域 和 ajax 领域 drupal 相关 的问题

How to save entity from a ajax form


0
vote

问题

中文

我正在运行drupal 8.8.x

问题

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

构建形式

  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; }   

提交表单

  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(); }   

我已确认$元素,$ Value是正确的密钥和值。但是,当我保存实体时,没有任何反应。数据库中没有任何更新。控制台或看门狗中没有出现错误。

如果有人知道可能是什么问题,我会欣赏一些洞察力! :)

英文原文

I'm running Drupal 8.8.x

The Problem

Entity is not being saved when form is submitted through AJAX. Example:

Build Form

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 Form

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(); } 

I've confirmed $element and $value are the correct key and value. However, when I save the entity nothing happens. There is nothing updated in the database. And there are no errors emitted in the console or watchdog.

If anyone knows what could be the issue I'd appreciate some insight! :)

           

回答列表

1
 
vote
vote
最佳答案
 

drupal 8不再缓存ajax窗体,因此您无法在初始表单构建中获取表单对象的属性。查看旁路表格缓存默认情况下使用#ajax 。

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

或考虑从常规形式API表单切换到实体表单。

 

Drupal 8 doesn't cache Ajax forms anymore, so you can't get properties of the form object set in the initial form build. see Bypass form caching by default for forms using #ajax.

Forms are only cached as rendered form. Put the entity id in a hidden form element to load the entity before saving. Add the entity cache tag to the form if you use default values from the entity.

Or consider to switch from a general Form API form to an entity form.

 
 
 
 

相关问题

0  Hook_Node_Presave期间如何重新排序实体引用版本字段?  ( How do you reorder an entity reference revisions field during hook node presave ) 
我正在尝试根据节点保存的文本字段重新排序一些段落,因此作者不需要手动维护字母顺序,但是当我保存节点时,所有值都丢失。我尝试匹配$ node-> get('field_paragraphs') - > getValue(),但这似乎没有工作。 function mymodule_node_presave...

0  如何将来自DrupalSettings的变量的值传递给同一页面中的iframe?  ( How can you pass the value of a variable from drupalsettings to an iframe in the ) 
我在drupal设置中有一个变量,从php获得它的值。 (function ($, Drupal, drupalSettings) { /** * @namespace */ Drupal.behaviors.pdf_appAccessData = { attach: function (cont...

0  用分类权重排序  ( Sort by taxonomy weight ) 
我有一个内容类型"成员" ,带有一个名为"成员角色" 的分类术语,它是一个多价值字段。每个成员最多可包含3个成员角色。 我已经创建了一个视图,以参考分类场与分类学术语重量排序的成员。但问题是每个成员在视图结果页面中重复3次。 我的问题是如何删除重复项,并且仅在多价字段(成员角色)中的最后一个值排序。 ...

0  如何将jQuery验证添加到自定义表单并将错误设置为字段?  ( How to add jquery validation to custom form and set error to field ) 
我想在我的自定义表单上使用jQuery实现客户端验证。 我已经启用了客户端验证贡献模块 我已使用以下代码成功附加了自定义JS文件: mysql> select nid, uid, created, changed from node; +-----+-----+------------+------------+...

2  使用PathAuto <8.x-1.6升级后,网站已损坏  ( Site broken after upgrading with pathauto 8 x 1 6 ) 
我最近升级到Drupal 8.8。不幸的是,我错过了需要升级PathaUto的备忘录,现在我的网站被打破了。大多数页面给出了消息"网站遇到意外错误。请稍后再试。" 我可以到达/用户并使用管理员帐户登录,我可以得到/ update.php,告诉我"pathauto模块与Drupal Core的当前版本不兼容。将Pat...

0  从自定义块中消耗外部API  ( Consume external api from custom block ) 
我目前正在编写一个自定义模块 - 用于 drupal 8 - 如何使用块(使用块显示它们并显示它们)来进行消费/发送外部API数据强> 是标准方法 - 直接或通过控制器通过插件消耗/发送外部API数据,并将其输出到Twig模板? 如果是的话,如何将数据从控制器发送到自定义插件块? 欢迎任何建议。谢谢你。 ...

2  如何在自定义字段中使用替换模式?  ( How can i use a replacement pattern in a custom field ) 
我刚刚在视图中创建了一个新的自定义字段,但我想在该字段中使用替换模式。是否有可能这样做? class CustomButtonField extends FieldPluginBase { /** * {@inheritdoc} */ public function usesGroupBy(...

0  如何在复合组件中的组件上设置验证错误?  ( How do i set a validation error on a component inside a composite component ) 
我有一个webform,一个复合组件允许添加多行。这种结构是这样的,因为它更清楚: webform. sample_details - 复合组件,允许多个"行" ,包含: sample_ref. date_sampled(字段我想要设置错误) 我遵循"方法2 - WebForm处理程序"...

0  只在首页上完全显示最近的帖子,其他人  ( Fully display only most recent post on front page furl the others ) 
目前我的首页只会为我所有新帖子显示一款预告片。 我知道我可以转到 Structure > Views > Frontpage 并将其更改为 show Content | Full ,它将在首页上显示每个帖子的完整帖子。 我想做的是,虽然只是我最近的帖子的全部帖子,然后是所有其他帖子的速度。 是可以这样做吗? ...

1  如何在多站安装中使用一组全局和每个子部分权限?  ( How to use a set of global and per subsite permissions in a multisite installati ) 
用例: 我有一个多功能安装,其中我想定义所有子部门可用的全局配置。我在 default 站点中定义此配置。对于这个例子,让我们说是: 一个角色编辑器 内容类型文章 内容类型页面 现在.. 在所有子区域中,角色编辑器需要有权"使用工具栏" 。全球许可。 在 subsite-a 中,我想允许编辑器只添加...

2  使用#states以复选框  ( Using states in a form with checkboxes ) 
我想当客户端检查一个复选框时,会出现文本字段。示例:如果他点击3个复选框,则为3的所有文本字段都会关闭。 我的#Checkboxes: $form['input']['livraison'] = [ '#title' => t('Options de livraison (à la charge de...

0  不要缓存自定义前页域  ( Dont cache custom front page domain ) 
我正在研究一个模块,该模块显示每个角色不同的FrontPage。我有三个FrontPages: 基本 www.domain.nl anonymous 用户,在基本站点设置中设置 为 role_1 他们转到 sub1.domain.nldashboard 为具有 role_2 他们转到 sub2.domain....

2  创建/编辑节点时如何将字段添加到侧栏菜单?  ( How do i add fields to the sidebar menu when creating editing nodes ) 
我想在Create / Edit节点页面上添加到侧栏菜单。我该怎么办? 我想这样做,以使内容创建/编辑一个小清洁器,更容易理解内容编辑器。 见附加图片... 谢谢。 ...

0  在模态对话框中从表单处理数据  ( Handling data from form in modal dialog ) 
我正在构建一个包含几个点击区域的工具。每个区域都有一个与 theme/template.php5 指向自定义表单路由的链接。 一切正常工作,我能够从表单中获取数据并存储它。然而,我需要用户在这种模态形式中的选择来反映在他们最初单击的区域中。 我忘记了在localstorage或其他东西中存储他们的选择并在关闭每个模...

0  在主和中学和次级语言之间或只是显示错误的URL翻译  ( Url translations transposing between primary and secondary languages or just dis ) 
我们有一个drupal 8.7.10网站,多语言(17个国家,每个人都有2种或更多语言)。 在我附加的例子中,我们有一个"人们" 页面,我们在这个国家列出了我们公司的人。 URL路径应显示"Insalar" 而不是土耳其土耳其翻译的"人民" 。路径的表单字段显示正确。但"查看" 选项卡以及管理员列表中的列表显示"人员...

1  如何从Preprocess函数中从链接字段中获取URL  ( How to get the url from a link field in preprocess function ) 
我有一个内容类型事件。 它有一个链接 field field_event_location_link 链接文本和URL都是可选的 默认情况下,如果没有键入的标题,则使用URL作为标题。 如果标题未填写,我想展示"位置" 。 如何使用预处理功能来查看是否有标题,如果没有,请使用我的字符串。 我尝试过... ...

1  如何在视图模板中单独访问链接字段(URL和文本)值?  ( How to access link fields url and text value separately in views template ) 
我的视图块有一个名为 field_link 的链接字段,附加到内容类型命名为 products ,和我正在尝试在视图模板 views-view-unformatted.html.twig 中单独访问链接字段值(URL和Text)。 以下代码给出格式化的html。 {{ row.content['#view']....

0  何时/如何执行/应用文本格式过滤器?  ( When how are text format filters executed applied ) 
我在文本格式上用过滤器试验D8,以了解为什么我没有看到我在块中的CSS被放置在一个块中。 打开和关闭限制允许的HTML标签并纠正故障HTML 和正确的故障和切碎的HTML 我看到限制过滤器不仅适用于输出,而且结果也被保存到块。与文本格式配置页面上的描述相比: 文本格式包含更改用户输入显示的过滤器 然后当我看到没有...

0  大管是破坏咏叹调的javascript功能  ( Big pipe is breaking aria accordion javascript functionality ) 
我正在尝试在Drupal 8站点上使用此库进行手风琴: https://scottaohara.github.io/a11y_accordions/ 它在未登录时工作正常,但如果用户登录它不起作用。也不会抛出错误。 我发现如果我将完整脚本复制并粘贴到浏览器控制台中,它就可以工作,所以我开始研究装载顺序。我发现...

1  大量的实体修订清洁导致连接堕胎  ( Large amount of entity revision cleaning leads to connection abortion ) 
我正在尝试通过DRUSH命令从具有修订功能的每个实体类型中删除修订。 实体的数量很多:10K节点约为2K段落。 在localhost上一切都很好。 但在云中,Drush_print($ log)成功运行,出现以下错误: [warning] PDO::beginTransaction(): MySQL serv...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.