【问题标题】:How can you add Symfony form fields based on failed validation?如何根据失败的验证添加 Symfony 表单字段?
【发布时间】:2011-02-26 13:04:40
【问题描述】:

基本上,我的模型要求将对象绑定到物理位置。为此,我使用用户在文本字段中输入的关键字通过 AJAX 从 API 中提取位置,设置 jQuery 自动完成以在用户选择推荐给他们的有效位置时将隐藏字段设置为唯一 ID。

这一切都很好,假设用户有 JavaScript 并点击了一个位置。

我需要实现回退,即无论出于何种原因,如果提交的表单没有隐藏字段具有值,则表单应使用可见的任何内容来查询 API 并显示一个选择框供用户选择一个值。

我大致知道我需要添加的代码,但我不知道在哪里绑定它。感谢任何帮助。

【问题讨论】:

    标签: php symfony1 symfony-forms symfony-1.4


    【解决方案1】:

    基本上,您必须创建一个自定义小部件并使用它来代替位置表单字段。然后,您可以将 javascript 添加到小部件渲染中。如果您扩展 sfWidgetChoice 或等效的学说,它将默认为一个选择框。然后,如果启用了 js,您的小部件的 js 会将字段重写为自动完成。

    查看sfFormExtraPlugin 了解如何执行此操作的一些很好的示例。

    【讨论】:

    • 我不确定你是否完全阅读了我的问题,我已经按照你的建议做了所有的事情,我现在正在努力解决这个问题。
    • 我的意思是。默认情况下,您的小部件应该是后备元素。然后当且仅当启用 js(或其他)时,该元素才应该成为自动完成。叫做渐进增强alistapart.com/articles/understandingprogressiveenhancement
    • 或者您可以使用优雅降级 (dev.opera.com/articles/view/…),它表示默认情况下使其达到最佳状态(即自动完成),然后在不支持功能时回退(即 javascript)。无论哪种方式,所有这些都应该是您的小部件的一部分,这就是为什么我建议您查看 sfFormExtraPlugin,它是如何在小部件中使用渐进增强的一个很好的例子。
    • 刚刚看到你的编辑,sfFormExtraPlugin 的 sfWidgetFormJQueryAutocompleter 看起来很有帮助 - ta。
    • 之所以有两个字段是因为用户不应该看到一个 ID,这对他们来说没有任何意义——我质疑这是否可以通过这个小部件实现,除非它适应它。还在寻找。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多