首页 > 解决方案 > 在奏鸣曲管理列表视图中呈现表单

问题描述

在我的应用程序中,我有一个代表新闻项目的列表视图。在每一行末尾我想添加一个加号按钮,通过单击它,一个小的内联表单应该在气泡中弹出(通过引导下拉菜单)。为了呈现这个表单,我的实际方法是通过render(controller(...))字段模板中的机制来呈现它。

{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}

{% block field %}
  {{ render(controller(...)) }}
{% endblock %}

渲染控制器调用根据官方 symfony 文档渲染表单...

呈现的表单将其数据发送回同一控制器中的 commentAction。

理论上它工作得很好,但实际上它的速度很慢。我的网站在 60 秒后超时运行,只是因为在列表视图中默认显示 64 个项目,并且每个项目都调用此渲染控制器函数...

有没有一种干净的方法来渲染一些额外的表单,而不是通过调用昂贵的渲染控制器调用?

我认为它可以与操纵控制器中的 listAction 方法一起工作(在这里注入额外的形式?)......但这似乎不是一个干净的解决方案。

有任何想法吗?

谢谢

编辑:

好的,我想我发现了瓶颈在哪里......上面的例子被简化了。实际上,我将每一行的集合加载到表单中......以您可以选择的形式,哪个作者创建了新闻。该列表中至少有 500 位作者……因此,将这些作者显示为一个新的,一切都很好。但是渲染选择选项 64 次太多了。有没有办法让它更快?一些缓存机制?

标签: symfonytwigsonata-admin

解决方案


我认为在这种情况下,不是一次呈现所有表单,而是在用户单击按钮后通过 AJAX 加载表单。另一种解决方案可能是替换一些自动完成的集合,这样您就不需要一次呈现所有数据。


推荐阅读