在sonata admin listview

时间:2018-05-25 09:48:37

标签: symfony twig sonata-admin

我的应用程序我有一个代表新闻项目的列表视图。在每一行结束时,我想添加一个加号按钮,然后点击它,一个小的内联形式应该在一个气泡中弹出(通过bootstrap下拉列表)。要呈现此表单,我的实际方法是通过字段模板中的render(controller(...))机制呈现此内容。

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

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

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

渲染表单将数据发送回同一控制器中的commentAction。

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

是否有一种干净的方式来渲染一些额外的形式而不是通过调用昂贵的渲染控制器调用?

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

有什么想法吗?

由于

编辑:

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

1 个答案:

答案 0 :(得分:0)

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