【问题标题】:Cakephp: iterate through pages in a custom viewCakephp:在自定义视图中遍历页面
【发布时间】:2015-09-26 07:46:48
【问题描述】:

我有一个包含几兆字节数据的视图,我希望它会急剧增长。 控制器索引功能以默认方式实现,带有分页。 我想将此视图导出到 csv 而不对控制器进行太多更改(我可以定义标题行和要包含在 CSV 中的行,但不要删除分页,因为它会破坏 html 表示)。

想法很简单:渲染 csv 视图模板,更改页面,渲染另一个。但是如何在自定义视图中更改当前的分页设置?

PS:我确实看过csv plugin。它不适用于分页,因此我摆脱了内存限制,它还创建了一个 tmp 文件,我更喜欢即时流式传输内容。

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    我不会在这里使用分页器,只需获取记录的总数,然后执行 while() 循环并批量获取数据以避免内存限制。并将其从数据库直接发送到客户端。使用 CakePHP 自带的 HTTP Client 并设置正确的 header 属性。

    查看这两个答案如何将其作为流发送:

    【讨论】:

    • 这似乎是一个控制器端解决方案,正是我试图避免的(以及我已经实现的)。
    • 好吧,然后在模型方法中实现它,将响应对象传递给该方法并从控制器发送响应。无论您如何实现它,您都必须以某种方式从模型方法返回一个流处理程序或类似的东西,您可以发送给客户端。但是向客户端发送数据并不是模型的工作。模型不必知道请求。
    • 这正是我要说的。这与模型无关,甚至与控制器无关,这是关于视图或“视图控制器”,最后一个是自定义视图类。避免模​​型/控制器实现的另一个原因是我想在所有实现的代码上获得这个功能而不修改它(我仍然可以实现一些单独的模板代码或以某种方式定义标题行)。
    • 然后创建一个新类,将查询或表对象作为构造函数和响应对象传递,在此类的方法中进行自己的分页并在任何您想要的地方使用它 - 或使其成为特征。而不是专注于一个花哨的解决方案(我在这里看不到原因)专注于完成任务而不是浪费大量时间?让它工作,然后让它更好地工作。也许你可以更详细地解释这个问题。
    • 数据处理不在视图中完成。当您将 CSV 数据流式传输到客户端时,您甚至不必为此构建视图。只需在 while() 循环中动态构建数据并立即使用响应对象发送它。但是按照你的意愿去做,并继续花时间在你的想法上。我很好奇最终结果会是什么样子。介意用代码做一个要点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多