在我的应用程序中,我有几个带有许多选项的表单字段。我遇到的问题类似于this question :在每个页面加载时获取和解析所有选项的成本很高(Twig 一遍又一遍地呈现所有选项,而没有客户端缓存可能)。这个问题让我创建了一种通过 AJAX 将选项发送到浏览器的方法。相当简单的方法:
为了防止 Symfony 查询所有选项(不是必需的:它们是通过 AJAX 加载的),我添加了
setMaxResults(0)
到 QueryBuilder
加载表单时(通过 Controller 添加选项)。是的,那是杂七杂八的。提交表单时,它仍将执行查询,因为它必须验证所选选项是否存在(并检查约束)。我想创建一个 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 Controller 选项自动完成对我来说看起来不错,但这是另一个(也许更快?)选项:通过 hinclude 呈现您的表单。
hinclude是一个 JS 库,用于“延迟”页面部分的加载,Ajax 认为。 Symfony 带有集成支持 ( official documentation )。
你如何使用它:
formAction
{{ render_hinclude(controller('...::form'), {'default': 'Loading...'}) }}
$form = $this->createForm(new FormType(), $obj, array('action' => $this->generateUrl('original_form_action')));
关于ajax - 创建 'Ajaxified' 表单字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38576990/