【发布时间】:2016-11-29 08:10:57
【问题描述】:
在我的应用程序中,我有几个带有许多选项的表单字段。我遇到的问题类似于this question:在每次页面加载时获取和解析所有选项的成本很高(Twig 一遍又一遍地呈现所有选项,而没有客户端缓存可能)。这个问题使我创建了一种通过 AJAX 将选项发送到浏览器的方法。相当简单的方法:
- 通过 AJAX 获取所有选项(键值)(例如通过获取 /countries.json)并尽可能缓存。 (在这种情况下,国名不太可能经常更改)
- 使用 selectize、select2 或类似插件将选项插入 DOM。
- 享受更快的表单:-)
为了防止 Symfony 查询所有选项(不是必需的:它们是通过 AJAX 加载的),我在加载表单时添加了 setMaxResults(0) 到 QueryBuilder(通过控制器添加选项)。是的,那是杂牌。提交表单时,它仍然会执行查询,因为它必须验证所选选项是否存在(并检查约束)。
我想创建一个custom Form Field Type,将这个功能添加到当前的EntityType:在呈现表单时不要加载选项,但仍然检查所选选项是否存在。我发现 many examples 与 dynamically modifying a form 相关,但我还没有找到与修改一个表单字段相关的示例,与它的父表单无关。
如何创建这样的表单字段类型?什么是好的起点?扩展EntityType、ChoiceType 或其他方法?
我已经在使用 Symfony 3.1,所以使用 lazy loading of form choices(Symfony 3.2 中的新功能)不会有问题。不确定这个新功能是否与我的问题有关。
【问题讨论】:
标签: ajax symfony symfony-forms