【问题标题】:In Drupal 7, is there a way to pop form errors off the display stack and/or prevent their display?在 Drupal 7 中,有没有办法从显示堆栈中弹出表单错误和/或阻止它们的显示?
【发布时间】:2011-12-02 18:17:11
【问题描述】:

我有一个 Drupal 7 表单,允许用户通过 AJAX 提交。如果用户未填写必填字段或输入无效信息,我可以返回并通过form_get_errors() 函数提醒用户。问题是这些值仍然在“显示堆栈”上(我敢肯定,这不是正确的术语) - 当用户刷新页面或导航到另一个页面时,会显示这些先前的错误。

有没有办法将这些错误设置为在我用form_get_errors() 抓取它们后不显示?

编辑:我的一个选择是删除所有验证功能,然后在我的 ajax 提交处理程序中手动进行验证......但我觉得这违背了这个表单 API 的目的。我想使用内置的所有内容,但我只想不显示错误消息。

【问题讨论】:

  • 是什么样的验证?您不能信任客户端验证,因为可能会被用户入侵。所以保留两者总是一个好主意
  • 无论哪种方式,验证仍将是服务器端。

标签: forms drupal drupal-7


【解决方案1】:

快速浏览一下form_set_error() 函数(由form_get_errors() 调用)表明它使用Drupal 7 静态缓存模式来保存错误消息。您应该能够通过在 AJAX 验证函数中调用以下命令来清除该缓存:

drupal_static_reset('form_set_error');

如果您使用表单 API 提供的 AJAX(即在您的表单元素上设置 #ajax),您可能需要查看 #limit_validation_errors() 看看这是否也能帮助您。

【讨论】:

  • 这似乎不起作用 - 仍然显示错误消息。设置 #limit_validation_errors 似乎不是一个好主意 - 虽然它会阻止显示错误消息,但也会阻止元素被验证。
  • 只是添加更多 - drupal_static_reset 将更改静态变量,但仍将设置 $_SESSION 超全局中的“消息”数组,我相信这是驱动显示的位置。我可以手动破解会话变量中的值,但我不确定这是处理这个问题的最佳方法。
  • 老实说,我只是破解这些值,如果您完全使用 FAPI,那么您不需要执行任何这些操作,因为验证消息会显示在替换包装器中并立即被清除从会话,所以问题永远不会发生。
猜你喜欢
  • 1970-01-01
  • 2011-06-23
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-18
相关资源
最近更新 更多