我会尽量解释清楚。我正在做一个相当大的项目并创建了一个 CrudController。这个控制器有一些默认动作(indexAction
, createAction
, archiveAction
...)。我还创建了一些相应的视图。
- 视图将
edit.html.twig
使用 form_widget() 函数绘制表单 - 该
list.html.twig
视图获取一个数据数组和一个(可配置的)列数组。这将绘制一个包含所需列和一些操作按钮(默认为编辑和存档按钮)的简单表格。
这个想法是我现在能够快速开发我的应用程序:我创建了一个新的实体、存储库、FormType,最后是一个扩展 CrudController 而不是 BaseController 的控制器。在我的 EntityController 中,我确保我的 CrudController 的配置是正确的(实体名称、指向 FormType 的指针......)。这一切都像一个魅力。
但是,我已经到了需要一些额外操作(除了编辑和存档)的实体(项目)的地步,即“渲染”或“下载”(渲染完成时)。因为我不想为了添加额外的操作而完全覆盖这个实体的列表视图,并且我将再次遇到这种情况,所以我决定尝试将操作的呈现移出列表视图:根据给定项目的状态,我创建了一个actions.html.twig
仅呈现操作的视图和一个actionsAction
添加其他操作的视图(它应该显示渲染按钮还是下载按钮?)。
在我的list.html.twig
我用过:
{% for row in data %}
{{ render(controller(entityControllerActionsAction, {'id': row.id})) }}
...
{% endfor %}
然而,事实证明渲染是非常消耗内存的,一旦我在列表中显示一些实体,就会导致“内存耗尽”错误。以前只用了12MB的页面,现在突然用了128MB以上(内存限制),简直不能接受。加载时间也大幅增加
我正在寻找一个体面的、面向对象的、DRY解决方案来解决这个问题。
- 为什么 render() 函数在这里会占用大量内存和性能?如果我能减少它,问题就解决了。
- 有没有办法模仿 render() 函数或使用不同的东西。
我不是在寻找预构建的代码或任何东西,而是在寻找有关前进方向的建议。感谢您的时间。