Php CRUD视图中循环中项目的渲染选项
我将尽可能清楚地解释这一点。我正在从事一个相当大的项目,并创建了一个CrudController。此控制器有一些默认操作(Php CRUD视图中循环中项目的渲染选项,php,symfony,twig,Php,Symfony,Twig,我将尽可能清楚地解释这一点。我正在从事一个相当大的项目,并创建了一个CrudController。此控制器有一些默认操作(indexAction,createAction,archiveAction…)。我还创建了一些相应的视图 edit.html.twig视图将使用form\u widget()函数绘制表单 list.html.twig视图获取一个数据数组和一个(可配置的)列数组。这将绘制一个简单的表,其中包含所需的列和一些操作按钮(默认情况下为编辑和归档按钮) 我现在可以快速开发我的应用
indexAction
,createAction
,archiveAction
…)。我还创建了一些相应的视图
视图将使用form\u widget()函数绘制表单edit.html.twig
视图获取一个数据数组和一个(可配置的)列数组。这将绘制一个简单的表,其中包含所需的列和一些操作按钮(默认情况下为编辑和归档按钮)李>list.html.twig
actions.html.twig
视图和一个actionsAction
视图,该视图将根据给定项目的状态(是否显示呈现按钮或下载按钮?)添加额外的动作
在我的list.html.twig中,我使用了:
{% for row in data %}
{{ render(controller(entityControllerActionsAction, {'id': row.id})) }}
...
{% endfor %}
然而,事实证明render非常占用内存,当我在列表中显示一些实体时,它会导致“内存耗尽”错误。以前只使用12MB的页面现在突然使用了128MB(内存限制),这是完全不可接受的。加载时间也大幅增加
我正在寻找一个体面的、面向对象的解决方案来解决这个问题
- 为什么render()函数在这里会占用大量内存和性能?如果我能减少,问题就会解决
- 有没有办法模仿render()函数或使用其他方法
我不是在寻找预构建的代码或任何东西,而是在寻找前进方向的建议。谢谢您的时间。如本“渲染”中所述,会产生新的请求,从而增加内存使用。请尝试与定义默认动作块的块结构一起使用。覆盖此项目实体。我从ZF1中记得一个类似的问题:如果我没有记错的话,在创建视图的新实例时,使用分区会导致大量已用内存。你能不能改为使用块结构:定义一个默认的动作块,并为项目实体覆盖它?这是我确实在考虑的一件事,但是,这意味着创建一个扩展crud列表视图的新视图。这有点麻烦,但可能是最好的解决方案。啊,看看这个问题,我猜,“渲染”会产生一个新的请求:-我将添加它作为进一步参考的答案。